多态
学习java的第五天——郁郁寡欢
多态:即同一种方法可以根据发送对象的不同而采用多种不同的行为方式。
public class Person{
public void run(){
System.out.println("run");
}
}//父类
public calss Student(){
@override
public void run(){
System.out.println("son");
}
}//子类重写父类的方法
public class Application{
public static void main(Sting[] args){
//一个对象的实际类型是确定的
//但可以指向的引用类型就不确定了,父类的引用指向子类
Student s1=new Student();
//引用类型 对象的实际类型
Person s2=new Student();
Object s3=new Student();
//对象能执行那些方法主要看左边的引用类型,和右边的关系 不大
//父类可以指向子类,但不能调用子类独有的方法
s2.run();//当子类未重写父类该方法时,引用类型为父 类,即执行父类的方法,否则执行子类的方法
s1.run();
}
}
父类无法调用子类的方法
多态注意事项
-
多态是方法的多态,属性没有多态
-
父类和子类有联系,类型转换异常:ClassCastException!
-
存在条件:继承关系,方法需要重写,父类引用指向子类对象
Father f1=new Son();
以下条件无法重写:
-
static 方法,属于类,不属于实列
-
final 常量;
-
private方法
多态存在的条件
-
有继承关系
-
子类重写父类方法
-
父类引用指向子类对象
Person s1=new Student();
个人小结:
多态主要体现在方法的执行上,到底是执行父类的方法还是执行子类的方法,在程序运行时会体现;总之方法未被重写,父类引用子类对象,执行父类方法,反之,方法被重写,父类引用指向子类对象,执行子类的方法。