继承中构造方法的访问特点与super关键字的三种用法
继承中方法的覆盖重写_应用场景
class Phone { public void sendMessage(){ System.out.println("发短信"); } public void call(){ System.out.println("打电话"); } public void showNum(){ System.out.println("来电显示号码"); } }
//智能手机类 class NewPhone extends Phone { //重写父类的来电显示号码功能,并增加自己的显示姓名和图片功能 public void showNum(){ //调用父类已经存在的功能使用super super.showNum(); //增加自己特有显示姓名和图片功能 System.out.println("显示来电姓名"); System.out.println("显示头像"); } } public class ExtendsDemo06 { public static void main(String[] args) { // 创建子类对象 NewPhone np = new NewPhone(); // 调用父类继承而来的方法 np.call(); // 调用子类重写的方法 np.showNum(); } }
继承后的特点——构造方法
当类之间产生了关系,其中各类中的构造方法,又产生了哪些影响呢?
首先我们要回忆两个事情,构造方法的定义格式和作用。
1. 构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法的。
2. 构造方法的作用是初始化成员变量的。所以子类的初始化过程中,必须先执行父类的初始化动作。子类的构
造方法中默认有一个 super() ,表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。代
码如下:
/* 继承关系中,父子类构造方法的访问特点: 1.子类构造方法当中有一个默认隐含的"super()*调用,所以一定是先调用的父类构造,后执行的子类构造。2.子类构造可以通过super关键字来调用父类重载构造。 3. super的父类构造调用,必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造。总结: 子类必须调用父类构造方法,不写则赠送super(),写了则用写的指定的super调用,super只能有一个,还必须是第一个。*/ class Fu { private int n; Fu(){ System.out.println("Fu()"); } }
class Zi extends Fu { Zi(){ // super(),调用父类构造方法 super(); System.out.println("Zi()"); } } public class ExtendsDemo07{ public static void main (String args[]){ Zi zi = new Zi(); } }
super关键字的三种用法
public class Fu { int num = 10; public void method(){ System.out.println("父类方法"); } }
/* /* super关键字的用法有三种: 1.在子类的成员方法中,访向父类的成员变量。 2.在子类的成员方法中,访向父类的成员方法。 3.在子类的构造方法中,访问父类的构造方法。 */ public class zi extends Fu { int num = 20; public zi(){ super(); } public void methozi(){ System.out.println(super.num); } public void method(){ super.method(); System.out.println("子类方法"); } }