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

java

一、基础概念

  (一)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 }

  代码运行

  

(三)、实例代码(二)

 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 入门实例 的全部内容, 来源链接: utcz.com/z/393972.html

回到顶部