多态是面对对象程序设计的三大支柱之一,剩余两个面对对象程序设计的支柱为继承和封装。
多态:一个对象具备多种形态,也可以理解为事物存在的多种体现形态。
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。
多态可以让父类型的变量可以引用子类型的变量。
多态存在的三个必要前提:
1.继承
2.重写
3.父类引用子类对象
多态成员变量:编译、运行看左边。
多态成员方法:编译看左边,运行看右边。
多态现实意义理解:
现实事物经常会体现出多种形态,如学生,学生是人的一种,学生张三既是学生也是人,即出现两种形态。
Java作为面向对象的语言,同样可以描述一个事物的多种形态。
例如人可以依据不同的岁数被分为儿童,青年,成人,老人,而不同年龄的人的饮食跑步风格也有所不同:
public class DTER {
//不同时期的人的饮食习惯和走路习惯
public static void main(String[] args) {
// TODO Auto-generated method stub
People a = new People();
children b = new children();
teenager c = new teenager();
adult d = new adult();
elder e = new elder();
People f = new adult();
a.Time();
b.Time();
b.Eat();
b.RunStyle();
c.Time();
c.Eat();
c.RunStyle();
d.Time();
d.Eat();
d.RunStyle();
e.Time();
e.Eat();
e.RunStyle();
f.Time();
}
}
class People{//父类
public void Time() {
System.out.println("反正是个人");
}
}
class children extends People{//子类
public void Time() {//重写
System.out.println("幼儿");
}
public void Eat() {//子类特有功能
System.out.println("喝奶");
}
public void RunStyle() {//子类特有功能
System.out.println("爬");
}
}
class teenager extends People{//子类
public void Time() {//重写
System.out.println("青年");
}
public void Eat() {//子类特有功能
System.out.println("饭等");
}
public void RunStyle() {//子类特有功能
System.out.println("跑");
}
}
class adult extends People{//子类
public void Time() {//重写
System.out.println("成人");
}
public void Eat() {//子类特有功能
System.out.println("快餐(为了快)");
}
public void RunStyle() {//子类特有功能
System.out.println("走");
}
}
class elder extends People{//子类
public void Time() {//重写
System.out.println("老人");
}
public void Eat() {//子类特有功能
System.out.println("稀粥等");
}
public void RunStyle() {//子类特有功能
System.out.println("慢走");
}
}
输出(不要太过在意输出的内容):
反正是个人
幼儿
喝奶
爬
青年
饭等
跑
成人
快餐(为了快)
走
老人
稀粥等
慢走
成人
多态的转型 :
多态的转型分为向上转型和向下转型两种
向上转型:多态本身就是向上转型过的过程
向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型



