多态
-
即同一方法可以根据发送对象的不同而采用多种不同的行为方式。
-
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)
-
多态存在的条件
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
-
注意:多态是方法的多态,属性没有多态性
-
instanceof (类型转换) 引用类型,判断一个对象是什么类型
public class Student extends Person{ public void go(){ System.out.println("go"); } }
public class Person { public Object go; public void run(){ System.out.println("run"); } }
public static void main(String[] args) { //Object > String //Object > Person > Teacher //Object > Person > Student Object object = new Student(); //System.out.println(X instanceof Y);//能不能通过 System.out.println(object instanceof Student);//true System.out.println(object instanceof Person);//true System.out.println(object instanceof Object);//true System.out.println(object instanceof Teacher);//false System.out.println(object instanceof String);//false System.out.println("========================="); Person person = new Student(); System.out.println(person instanceof Student);//true System.out.println(person instanceof Person);//true System.out.println(person instanceof Object);//true System.out.println(person instanceof Teacher);//false //System.out.println(person instanceof String);//编译报错 System.out.println("========================"); Student student = new Student(); System.out.println(student instanceof Student);//true System.out.println(student instanceof Person);//true System.out.println(student instanceof Object);//true //System.out.println(student instanceof Teacher);//编译报错 //System.out.println(student instanceof String);//编译报错 } }
public class Application { public static void main(String[] args) { //类型之间的转化: 父 子 //子类转换为父类,可能丢失自己的本来的一些方法! Person student = new Student(); ((Student)student).go(); } } /* 1、父类引用指向子类的对象 2、把子类转换为父类,向上转型; 3、把父类转换为子类,向下转型:强制转换 4、方便方法的调用,减少重复的代码!简洁 封装、继承、多态! 抽象类,接口 */