一、多态
- 即同一方法可以根据发送对象的不同而采用多种不同的行为方式
- 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)
- 多态存在的条件
- 有继承关系
- 子类重写父类的方法
- 父类引用指向子类对象
- 注意:多态是方法的多态,属性没有多态性
- 代码
- 父类
public class Person {//人类 public void run(){ System.out.println("run"); } }
- 子类
public class Student extends Person {//学生类 public void run() { System.out.println("son"); } public void eat() { System.out.println("eat"); } }
- 测试类
public class Application {//测试类 public static void main(String[] args) { //一个对象的实际类型是确定的// //new Student(); //new Person(); //可以指向的引用类型就不确定了// //Student,子类,能调用的方法都是自己的或者继承父类的 Student s1 = new Student();//子类的引用指向子类对象 //Person,父类,引用可以指向子类对象,但不能调用子类独有的方法 Person s2 = new Student();//父类的引用指向子类对象 Object s3 = new Student();//祖宗类的引用指向子类对象 //s2如果子类没有方法,则继承父类的方法 //s2如果子类重写了父类的方法,则执行子类的方法 s2.run();//son s1.run();//son //对象能执行哪些方法,主要看引用变量的类型,和右边new的对象关系不大// s1.eat(); ((Student)s2).eat();//父类没有子类的方法时,不能直接使用(编译错误),需强制转换 /* 多态的注意事项: 1.多态是方法的多态,属性没有多态 2.父类和子类,有联系 类型转化异常! ClassCastException! 3.存在条件:继承关系,方法需要重写,父类引用指向子类对象! Father father = new Son(); 4.方法需要重写,但有些方法是不能重写的: 1.static 方法,是属于类的方法,不是实例方法(对象方法) 2.Final 常量 3.private 方法 */ } }
多态的注意事项:
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系 [类型转化异常! ClassCastException!]
- 存在条件:继承关系,方法需要重写,父类引用指向子类对象! Father father = new Son();
- 方法需要重写,但有些方法是不能重写的:
- static 方法,是属于类的方法,不是实例方法(对象方法)
- Final 常量
- private 方法
- 父类
- insatanceof (类型转化) 引用类型
——Java面对对象13:instanceof 和 多态类型转换