多态:
同一个事件发生在不同的对象上会产生不同的效果。
不同实列对象使用通过同一种方法而产生的不同的效果。
例如:
- 不同动物奔跑run方式不同
- 不同人种说话方式不同
- 不同的的车刹车的方式不同
多态存在条件:
- 继承
- 重写
- 父类的引用指向子类的对象
public class Animal{
public void chat(){
System.out.println("Animal-----chating.....");
Say();
}
public void say(){
System.out.println("Animal------saying...");
}
}
public class Lion extends Animal{
/**
* @desc 子类重载父类方法
* 父类中不存在该方法,向上转型后,父类是不能引用该方法的
* @return void
**/
public void chat(String s){
System.out.println("JNC 的 Fun1...");
say();
}
/**
* 子类重写父类方法
* 指向子类的父类引用调用say时,Say必定是调用该方法
**/
public void say(){
System.out.println("Lion 的saying...");
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Lion ();
a.chat();
}
}
输出:
Animal-----chating.....
Lion 的saying...
多态可以总结如下:
指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的。即:指向子类的父类引用不能使用子类的新增的方法和属性。
这个程序中子类lion重载了父类Animal的方法chat(),重写say(),而且重写后的chat(String s)与 chat()不是同一个方法,由于父类中没有该方法,向上转型后会丢失该方法,所以执行lion的Animal类型引用是不能引用chat(String a)方法。而子类lion重写了say() ,那么指向lion的Animal引用会调用lion中say()方法。