多态、super与this
作者:互联网
多态
-
子类继承父类,一个父类可以有多个子类,子类在有父类特征的同时,也具有自己的特征,并且能实现不同的效果,就是多态。
方法的多态:同一个方法名:参数列表不同,调用不同的方法(方法的重载);类的不同,调用不同的方法(方法的重写)
类的多态:同一个对象,可根据不同的实参类,调用不同的行为方式;
-
多态的特点:
-
多态的前提必须满足:继承、方法重写、向上转型3个条件
-
一个对象的编译类型和运类型可以不一致;
-
编译类型在定义对象时,就确定了,不能改变;
-
运行类型是可以变化的;
-
编译类型看定义时 = 的左边;运行类型看 = 的右边;
-
多态是方法的多态,属性没有多态;属性的值看编译类型;
-
父类和子类,有联系; 类型转换异常:ClassCastException!
-
多态的使用
将父类类型作为方法参数,此时可以直接将子类类型的对象作为实参传递
将父类类型作为方法返回值,此时可以直接将子类类型的对象作为返回
-
向上转型:
父类的引用指向了子类的对象
父类类型 引用名 = new 子类类型();向上转型
①引用可以调用父类中的所有成员(遵循访问权限),
②不能调用子类特有成员(因为在编译阶段,能调用哪些成员,由编译类型决定);
③最终运行效果看子类(运行类型)的具体实现;运行类型时是可以变化的,从子类寻找方法至父类
-
向下转型:
子类类型 引用名 = (子类类型)父类引用;
将父类类型的引用转成子类类型,需要强制转换。但可能会丢失方法
父类的引用指向对象必须是子类类型,才可转换为子类类型,否则报错,转换异常
向下转型后,可以调用子类类型中所有的成员;
转型前,需提前做类型检查 instanceof
-
instanceof:
-
比较操作符,用于判断对象的运行类型是否为XX类型或XX类型的子类型;
-
x instanceof y;x是一个对象,y表示一个类或者接口。
-
x、y存在父子关系,编译通过,对返回true;错误返回false;不存在父子关系,编译报错。
-
x是y类(或接口)的实例或者子类实例时,结果返回true,否则返回false。
-
-
多态数组
-
数组的定义类型为父类类型,里面保存的元素为子类类型;
-
遍历数组,可调用子类类型重写之后的方法;
-
遍历数组for中,利用instanceof判断元素的运行类型,再进行向下转型,可调用子类特有的方法;
-
-
多态参数
-
方法定义的形参类型为父类类型,实参类型允许为子类类型;
-
进而调用子类类型的方法和属性;
-
Java的动态绑定机制
-
当调用对象方法的时候,该方法会和该对象的内存地址(即运行类型)绑定;
-
当调用对象属性时,没有动态绑定,哪里声明哪里使用;
this关键字
-
this关键字代表本类对象的引用,通过关键字可以隐式的用于调用对象的全局变量和方法;this引用的是本类的一个对象
-
除了可以调用全员变量和成员方法外,还可以作为方法的返回值以及调用类中的构造方法(this(),此时必须在第一行)this(class-list);class-list指定了本类构造方法中的所有参数;
-
this只能在非静态环境中使用;
-
调用对象属性
-
调用其他的构造方法,只能构造方法调用构造方法,
this. xxx = ;代表当前类的,=后面的值通常是参数传进来的值
super关键字
-
由于子类不能继承父类的构造方法,如果要调用父类的构造方法,可以使用super关键字。super可以用来访问父类的构造方法、非静态方法和属性。
-
super关键字的功能:在子类的构造方法中显式的调用父类构造方法
访问父类的成员方法和变量
super调用父类构造方法:super(parameter-list);parameter-list指定了父类构造方法中的所有参数,super()必须在子类构造方法的方法体的第一行
-
注意点:
1.只能在非静态环境中使用;
2.super调用父类的构造方法,必须在构造方法的第一行
3.super必须只能出现在子类的方法或者构造方法中
4.super和this 不能同时存在一个构造方法里
-
对比this
代表的对象不同:this本身调用者这个对象;super代表父类对象的引用
前提不一样:this没有继承也可以使用,super只能在继承条件下才可以使用
构造方法:this();本类的构造,super();父类的构造
final关键字
-
final修饰类,这个类不能被继承,但不影响创建对象;
-
final修饰的方法不能被重写,但父类没有被final修饰的方法,子类重写后可以加final;
-
final修饰变量,代表是常量,只能够赋值一次,当修饰的是引用的类型的时候,不能被重新赋值,但可以修改对象的属性;
标签:调用,构造方法,子类,多态,类型,父类,super 来源: https://www.cnblogs.com/xuduoduo92/p/16552368.html