Java面向对象之关键字super 入门实例

时间:2022-08-22 18:23:30

一、基础概念

  (一)super关键字

    super关键字的用法和this相似。this代表的是当前对象。super代表的是父类中内存空间。

    子父类中是不会出现同名属性的情况。

  (二)继承中、成员变量问题

    当成员变量中出现了同名的局部变量,用关键字 this来区分。当父类中出现了同名的成员变量,用关键字 super来区分

  (三)继承中,成员函数问题

    1、子父类中出现一样的方法(返回值类型、函数名、参数列表等都一样),创建子类对象调用该方法时,运行的是子类中的方法。

    2、这种情况称之为函数的另一个特性----(override)覆盖、重写、复写。

    3、注意:

       子类覆盖父类权限必须大于等于父类的权限。

       覆盖中,静态只能覆盖静态,或者被静态覆盖。

  (四)继承中,构造函数问题

    1、创建子类对象,父类中的构造函数也会运行的原因:子类的所有构造函数中的第一行,都有一个默认访问父类中空参数的构造函数super();

    2、调用本类中的构造函数使用this([实参列表])语句。调用父类中的构造函数用super([实参列表])语句。

    3、子类实例化的过程,必须先执行父类中的初始化的原因:子类继承了父类中的内容,所以子类在实例化时,必须要先执行父类中的内容。

    4、注意:

       如果父类中没有空参数的构造函数时,子类的构造函数必须通过super语句指定要访问的父类中的构造函数。

       this()语句和super()语句都必须出现在构造函数的第一行。因为初始化的动作要先执行。所以this()语句和super()语句只能存在一个。

二、实例代码(一)

 1 class Fu    //默认继承 object
 2 {
 3     int num = 4;
 4     public void show()
 5     {
 6         System.out.println("父类中的成员函数show ......" );
 7     }
 8     Fu()
 9     {
10         //默认存在语句superz();
11         //显示初始化。
12         //构造代码块初始化。
13         System.out.println("父类中的构造函数Fu ......");
14     }
15     Fu(int x)
16     {
17         //默认存在语句super();
18         System.out.println("父类中的构造函数Fu ......"+x);
19     }
20 }
21 class Zi extends Fu
22 {
23     //子类和父类的成员变量一样的情况
24     int num = 5;
25     //子类和父类的成员函数一样的情况,进行了覆盖
26     public void show()
27     {
28         //局部变量与成员变量也一样的情况
29         int num = 6;
30         System.out.println("子类中的成员函数show ...... ");
31         
32         System.out.println("num = "+num);//输出子类中局部变量num的值
33         System.out.println("num = "+this.num);//输出子类中成员变量num的值
34         System.out.println("num = "+super.num);//输出父类中成员变量num的值
35     }
36     //子类和父类的构造函数一样的情况。子类和父类的语句都执行。
37     Zi()
38     {
39         //默认存在语句super();
40         
41         System.out.println("子类中的构造函数zi ......" );
42     }
43     Zi(int x)
44     {
45         //默认存在语句super();
46         super(8);//显示指定super的方式来访问父类中的构造函数。必须定义在第一行
47         System.out.println("子类中的构造函数Zi ......"+x);
48     }
49 }
50 class SuperDemo 
51 {
52     public static void main(String[] args) 
53     {
54         Zi z1 = new Zi();
55         z1.show();
56         Zi z2 = new Zi(5);
57         z2.show();
58     }    
59 }

  代码运行

  Java面向对象之关键字super 入门实例

(三)、实例代码(二)

 1 class Person
 2 {
 3     private String name;
 4     private int age;
 5     
 6     //父类Person的构造函数    
 7     Person(String name,int age)
 8     {
 9         this.name = name;
10         this.age = age;
11     }
12     public void setName(String name)
13     {
14         this.name = name;
15     }
16     public void setAge(int age)
17     {
18         this.age = age;
19     }
20     public String getName()
21     {
22         return name;
23     }
24     public int getAge()
25     {
26         return age;
27     }
28 }
29 //Student继承Person
30 class Student extends Person
31 {
32     Student(String name,int age)
33     {
34         super(name,age);//用super调用父类Person的构造函数。
35     }
36     public void study()
37     {
38         System.out.println("name: "+this.getName()+"   age: "+this.getAge()+"    study ......");
39     }
40 }
41 //Worker继承Person
42 class Worker extends Person
43 {
44     Worker (String name,int age)
45     {
46         super(name,age);////用super调用父类Person的构造函数。
47     }
48     public void work()
49     {
50         System.out.println("name: "+this.getName()+"   age: "+this.getAge()+"    work ......");
51     }
52 }
53 class SuperDemo1 
54 {
55     public static void main(String[] args) 
56     {
57         Student p1 = new Student("xiaohong",18);
58         p1.study();
59         Worker p2 = new Worker("xiaoming",32);
60         p2.work();
61     }    
62 }

  代码运行

  Java面向对象之关键字super 入门实例