多态
动态编译:类型:可拓展性变得更强
即同一方法根据发送对象的不同而采用多种不同的行为方式。
一个对象的实际类型是确定的,但可以指向对象的引用类型有很多(父类,有关系的类)
多态存在的条件
1.有继承关系
2.子类重写父类的方法
3.父类引用指向子类对象
注意:多态是方法的多态,属性没有多态
instanceof 类型转换~ 引用类型转换
package oop.Demo06;
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
//可以指向的引用类型是不确定的: 父类的引用指向子类
//Student 能调用的方法都是自己的或者继承父类的!
Student s1 = new Student();
//Person 父类型, 可以指向子类,但是不能调用子类独有的方法
Person s2 = new Student();
Object s3 = new Student();
s2.run();//子类重写了父类的方法,那么就是执行子类的方法
s1.run();
}
}
package oop.Demo06;
public class Student extends Person{
@Override
public void run() {
System.out.println("son");
}
public void eat(){
System.out.println("eat");
}
}
多态注意事项:
1. 多态示方法的多态,属性没有多态
2. 父类和子类,有联系 类型转换异常!ClassCastException!
3. 存在条件:继承关系 方法需要重写,父类引用指向子类对象! Father f1 =new Son();
不能重写的方法:
1.static 方法 属于类,他不属于实例
2.final 常量
3.private方法:私有的不能重写
1.父类引用指向子类的对象
2.把子类转换为父类,向上转型可自动转换
3.把父类转换为子类,向下转型: 需要强制转换
4.方便方法的调用,减少重复的代码,可以有效的提升我们的利用率
抽象:封装 继承 多态! 抽象类, 接口