多态
-
即同一方法可以根据发送对象的不同而采用多种不同的行为方式
-
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)
-
多态存在的条件:
- 有继承关系
- 子类重写父类的方法
- 父类引用指向子类对象 -
注意:多态是方法的多态,属性没有多态性
-
instanceof
-
插一嘴:Exception in thread “main” java.lang.StackOverflowError
栈空间耗尽爆出异常,导致死循环。 -
解决方法:避免两个方法的重复调用,导致内存泄漏。
package demo;
//子类
public class Student extends Person {
public void eat(){
System.out.println("eat");
}
}
package demo;
//父类
public class Person {
public void run(){
System.out.println("run");
}
}
package demo;
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
//new Person();
//可以指向的引用类型就不确定了;父类的引用指向子类
Student s2 = new Student();
Person s1 = new Student();
//对象能执行哪些方法,主要看对象左边的类型,和右边地方关系不大
s1.run();
s2.eat();
}
}
多态注意事项:
-
多态是方法的多态,属性没有多态
-
父类和子类,有联系 类型转换异常:ClassCastException!
-
存在条件:继承关系,方法需要重写,父类引用指向子类! Father f1 = new Son();
1. static() 方法。属于类,不属于实例 2. final 常量 3. private 私有
- 父类引用指向子类的对象
- 把子类转换为子类,向上转换;
- 把父类转换为子类,向下转型; 强制转换
- 方便方法的使用,减少重复的代码
补充:void 方法可以调用static方法,但static方法不可以调用void方法。