一个类 父类(父接口)的引用执行多个子类对象。
实现多态必须满足以下条件:
1.有继承关系。
2.有子类重写父类方法。
3.父类的引用指向多个子类对象。
转型
父类 对象名 = new 子类();
//调用的是父类或子类重写父类的方法
子类 对象名 = new (子类)父类对象名;
//调用的是子类特有的方法
/**
*
* @author ljf
*多态 表示多种形态
* 一个类父类(接口)的引用执行多个子类对象
* 实现多态必须满足以下条件:
* 1.有继承关系
* 2.有子类重写父类方法
* 3.父类的引用指向多个子类对象
*/
public class Student {
//先抽出学生的共性 名字 年龄 身高 性别
private String name;
private int age;
private double higth;
private char sex;
public String getname(){
return name;
}
public void setname(String name){
this.name=name;
}
public int getage(){
return age;
}
public void setage(int age){
this.age=age;
}
public double gethigth(){
return higth;
}
public void sethigth(double higth){
this.higth=higth;
}
public char getsex(){
return sex;
}
public void setsex(char sex){
this.sex=sex;
}
//还有一些必要的行为
//吃
public void eat(){
System.out.println("吃");
}
//睡
public void sleep(){
System.out.println("睡");
}
//玩
public void play(){
System.out.println("玩");
}
public void xinxi(){
System.out.println("姓名:"+this.name+"年龄:"+this.age
+"身高:"+this.higth+"性别:"+this.sex);
}
}
/**
*
* @author ljf
*继承Student类 重写玩的方法
*还具有特有的方法:飞
*/
public class Student_1 extends Student {
public void play(){
System.out.println("踢足球");
}
public void fly(){
System.out.println("飞");
}
}
/**
*
* @author ljf
*继承Student类 重写吃的方法
*还具有特有的方法:喷火
*/
public class Student_2 extends Student {
public void eat(){
System.out.println("吃肉");
}
public void fire(){
System.out.println("喷火");
}
}
/**
*
* @author ljf
*多态,表示多种形态
*一个类的引用指向多个子类对象
*/
public class Run {
public static void main(String[] args){
/*
* new对象时需要
* 向上向下转型
* 向上转型:自动转型
* 向下转型:强制转型
*/
/*
int a = 10;
long b = a;
a = (int)b;
*/
//父类 父类对象名 = new 子类();
Student s = new Student_1();
//调用父类方法和子类重写父类方法
s.setname("赵");
s.setsex('男');
s.setage(18);
s.sethigth(1.68);
s.xinxi();
s.eat();
s.sleep();
s.play();//调用的是Stu1的play方法
//调用子类特有方法需要向下转型
//子类 子类对象名 = (子类) 父类对象名;
Student_1 s1 = (Student_1) s;
s1.fly();
System.out.println("---------------------------");
}
}