多态介绍
多态
-
即同一方法可以根据发送对象的不同而采用多种不同的行为方式;
-
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多;
-
多态存在的条件
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
-
注意:多态是方法的多态,属性没有多态性
主方法:

父子:

多态注意事项:
- 多态是方法的多态,不是属性的多态,属性没有多态;
- 需要父子关系、有联系,不然会报类型转换异常!ClassCastException!
- 存在条件:继承关系,方法需要重写,父类引用指向子类对象;Father f1 = new Son();
- 不能重写的方法:
- static方法,属于类,不属于实例;
- final常量;
- private方法;
- instanceof
判断一个对象是什么类型
//父子的内容:Object为所有的父类,Person为Student和Teacher的父类;String也是Object的一个子类,但与其它无关
public static void main(String[] args) {
// System.out.println(X instanceof Y);
// 第一步判断X和Y之间有父子关系才不会编译出错
// 第二步判断instanceof左边是不是右边的实例对象,是则true不是则false
Object object = new Student();
System.out.println(object instanceof Student);//true
System.out.println(object instanceof Teacher);//false
System.out.println(object instanceof Person);//true
System.out.println(object instanceof Object);//true
System.out.println(object instanceof String);//false
}
-
可以把Object、Person、Student理解为三个包含关系的圆,new了一个Student()对象,那么这个对象的实际位置就在Student这个圆里面;用instanceof比较,就是判断对象的实际位置是否在这个圆里面;
-
以instanceof左边类名为准,判断A和B是否有父子或者子父关系,如果是,编译通过,不是则报错;编译通过后再判断A是否是B的实例对象或者B子类的实例对象,是则为true,不是为false;
-
instanceof要求比较的两个类具有包含关系;
-
A instanceof B :判断对象A是否是类B或类B的子类创造的对象;
注意区分上述对象和类的意义!!!
- 类型转换,高转低语法:(低对象名)新数据名;Alt+Enter

浙公网安备 33010602011771号