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

一、基础概念

(一)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 voidshow()5 {6 System.out.println("父类中的成员函数show ......");7 }8 Fu()9 {10 //默认存在语句superz();11 //显示初始化。12 //构造代码块初始化。

13 System.out.println("父类中的构造函数Fu ......");14 }15 Fu(intx)16 {17 //默认存在语句super();

18 System.out.println("父类中的构造函数Fu ......"+x);19 }20 }21 classZi extends Fu22 {23 //子类和父类的成员变量一样的情况

24 int num = 5;25 //子类和父类的成员函数一样的情况,进行了覆盖

26 public voidshow()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(intx)44 {45 //默认存在语句super();

46 super(8);//显示指定super的方式来访问父类中的构造函数。必须定义在第一行

47 System.out.println("子类中的构造函数Zi ......"+x);48 }49 }50 classSuperDemo51 {52 public static voidmain(String[] args)53 {54 Zi z1 = newZi();55 z1.show();56 Zi z2 = new Zi(5);57 z2.show();58 }59 }

代码运行

5e662cb0dc68db15006e68a3eaf60df8.png

(三)、实例代码(二)

1 classPerson2 {3 privateString name;4 private intage;5

6 //父类Person的构造函数

7 Person(String name,intage)8 {9 this.name =name;10 this.age =age;11 }12 public voidsetName(String name)13 {14 this.name =name;15 }16 public void setAge(intage)17 {18 this.age =age;19 }20 publicString getName()21 {22 returnname;23 }24 public intgetAge()25 {26 returnage;27 }28 }29 //Student继承Person

30 classStudent extends Person31 {32 Student(String name,intage)33 {34 super(name,age);//用super调用父类Person的构造函数。

35 }36 public voidstudy()37 {38 System.out.println("name:"+this.getName()+"age:"+this.getAge()+"study ......");39 }40 }41 //Worker继承Person

42 classWorker extends Person43 {44 Worker (String name,intage)45 {46 super(name,age);用super调用父类Person的构造函数。

47 }48 public voidwork()49 {50 System.out.println("name:"+this.getName()+"age:"+this.getAge()+"work ......");51 }52 }53 classSuperDemo154 {55 public static voidmain(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 }

代码运行

72a256ffcb3309e36efae1e82108291f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值