本文共 2545 字,大约阅读时间需要 8 分钟。
方法重写的应用场景:当父类的方法不能完全满足子类使用的时候,既可以保留父类的功能(沿袭、传承),还可以有自己特有的功能
方法重写的注意事项:
不可以重写父类私有的成员方法,压根就看不到父类的私有成员
子类重写父类方法,权限必须大于等于父类方法的权限
注解
@Override:方法重写,说明下面的方法是重写父类的方法
案例代码
package com.itheima_03;/* * 方法重写的应用场景:当父类的方法不能完全满足子类使用,这个时候子类重写父类的方法, * 并可以在方法中使用关键字super调用父类的方法,这样做即可以保有父类的功能,也可以拥有子类特有的功能 * 方法重写的注意事项: * 不能重写父类私有的方法 * 权限必须大于等于父类方法的权限 * * 注解:@ * */public class ExtendsDemo5 { public static void main(String[] args) { NewPhone np = new NewPhone(); np.call(); }}class Phone { void call() { System.out.println("打电话"); }}class NewPhone extends Phone { @Override public void call() { System.out.println("录音"); //System.out.println("打电话"); //super.call(); }}
A:super(实参列表);语句 在子类的构造方法中使用,用来调用父类中的构造方法(具体哪一个由传递的参数决定),并且只能在构造方法第一行使用
B:this(实参列表); 语句 在类的构造方法中使用,用来调用本类中的其它构造方法(具体哪一个由传递的参数决定),并且只能在构造方法的第一行使用
案例代码
package com.itheima_01;/* * 继承中构造方法的执行顺序 * 在子父类中,创建子类对象,调用子类的构造方法, * 在子类的构造方法的第一行代码如果没有调用父类的构造或者没有调用子类的其他构造,则默认调用父类无参构造 * 为什么要调用父类构造? * 因为需要给父类的成员变量初始化 * 肯定会先把父类的构造执行完毕,在去执行子类构造中的其他代码 * * 我是父类无参构造 --- 我是子类有参构造 --- 我是子类无参构造 */public class ExtendsDemo6 { public static void main(String[] args) { //Die d = new Die(); Zi6 z = new Zi6(); }}class Die6 { public Die6() { System.out.println("我是父类无参构造"); } public Die6(int num) { System.out.println("我是父类有参构造"); }}class Zi6 extends Die6 { public Zi6() { //super(1); //super(); this(1);//不会再调用父类的无参构造了 System.out.println("我是子类无参构造"); } public Zi6(int num) { //会默认调用父类无参构造 System.out.println("我是子类有参构造"); }}
1.3 this与super区别
package com.itheima_01;/* * this和super的区别 this:当前对象的引用 调用子类的成员变量 调用子类的成员方法 在子类的构造方法第一行调用子类其他构造方法 super:子类对象的父类引用 调用父类的成员变量 调用父类的成员方法 在子类的构造方法第一行调用父类的构造方法 */public class ExtendsDemo7 { public static void main(String[] args) { Zi z = new Zi(); z.function(); }}class Die { int num = 10; public Die() { System.out.println("我是父类无参构造"); } public Die(int num) { System.out.println("我是父类有参构造"); } public void method() { System.out.println("我是父类的方法"); }}class Zi extends Die { //int num = 30; public Zi() { //this(1);//第一行不调用子类其他构造或者是父类构造,默认调用父类无参构造 super(); System.out.println("我是子类无参构造"); } public Zi(int num) { System.out.println("我是子类有参构造"); } public void method() { System.out.println("我是子类的方法"); } public void function() { //this.num = 50; //System.out.println(num); //this.method(); //super.num = 40; //super.method(); System.out.println(this.num); }}
A:优点
提高了代码的复用性
提高了代码的可维护性
B:缺点:
类的耦合性增强了
开发的原则:高内聚低耦合
内聚:就是自己完成某件事情的能力
耦合:类与类的关系
转载地址:http://cjjqb.baihongyu.com/