Java super关键字:super调用父类的构造方法、利用super访问父类成员

由于子类不能继承父类的构造方法,因此,要调用父类的构造方法,必须在子类的构造方法体的第一行使用 super() 方法。该方法会调用父类相应的构造方法来完成子类对象的初始化工作。

在以下情况下需要使用 super 关键字:

  • 在类的构造方法中,通过 super 语句调用该类的父类的构造方法。
  • 在子类中访问父类中的成员。

使用 super 调用父类的构造方法

子类可以通过 super 关键字来调用一个由父类定义的构造方法,格式如下:

super(parameter-list);

其中,parameter-list 指定了父类中构造方法所需的所有参数。super() 必须是在子类构造方法的主体第一行。

例如,在 Person 类中指定了两个构造方法。示例代码如下:

 
  1. public People(String name,int age,String sex,String sn)
  2. {
  3. this.name=name;
  4. this.age=age;
  5. this.sex=sex;
  6. this.sn=sn;
  7. }
  8. public People(String name,String sn)
  9. {
  10. this.name=name;
  11. this.sn=sn;
  12. }


那么,Student 类继承了 Person 类,就可以使用 super 语句来定义 Student 类的构造方法。示例代码如下:

 
  1. public Student(String name,int age,String sex,String sn,String stuno,String department)
  2. {
  3. super(name,age,sex,sn); //调用父类中含有4个参数的构造方法
  4. this.stuNo=stuno;
  5. this.department=department;
  6. }
  7. public Student(String name,String sn,String stuNo)
  8. {
  9. super(name,sn); //调用父类中含有两个参数的构造方法
  10. this.stuNo=stuNo;
  11. }


从上述 Student 类构造方法代码可以看出,super 用来直接调用父类中的构造方法,使用它可以使书写代码更简洁方便。

使用 super 访问父类成员

使用 super 访问父类中的成员与 this 关键字的使用相似,只不过它引用的是子类的父类,基本形式如下:

super.member

其中,member 是父类中的方法或属性名称。这种形式多用于子类的成员名隐藏了父类中的同名成员的情况。

例 1

在 Animal 类和 Cat 类中分别定义了 public 类型的 name 属性和 private 类型的 name 属性,并且 Cat 类继承 Animal 类。那么,我们可以在 Cat 类中通过 super 关键字来访问父类 Animal 中的 name 属性,通过 this 关键字来访问本类中的 name 属性,如下面的代码:

 
  1. //父类Animal的定义
  2. public class Animal
  3. {
  4. public String name; //动物名字
  5. }
  6. //子类Cat的定义
  7. public class Cat extends Animal
  8. {
  9. private String name; //名字
  10. public Cat(String aname,String dname)
  11. {
  12. super.name=aname; //通过super关键字来访问父类中的name属性
  13. this.name=dname; //通过this关键字来访问本类中的name属性
  14. }
  15. public String toString()
  16. {
  17. return"我是"+super.name+",我的名字叫"+this.name;
  18. }
  19. public static void main(String[] args)
  20. {
  21. Animal cat=new Cat("动物","喵星人");
  22. System.out.println(cat);
  23. }
  24. }


上述代码演示了使用 super 实现子类的成员名隐藏父类中同名成员的情况。尽管 Cat 类中的属性 name 隐藏了 Animal 类中的 name 属性,但是 super 允许访问父类中的 name 属性。另外,super 还可以用于调用被子类隐藏的方法。

运行程序,输出结果如下:

我是动物,我的名字叫喵星人
  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中,使用 `super()` 关键字可以调用父类构造方法。`super()` 关键字可以用于以下两种情况: 1. 调用父类的无参构造方法 如果子构造方法中没有使用 `super()` 关键字调用父类构造方法Java 编译器会默认调用父类的无参构造方法(如果父类有的话)。因此,如果父类有无参构造方法,我们可以在子构造方法使用 `super()` 关键字调用父类的无参构造方法,如下所示: ``` public class Parent { public Parent() { // ... } } public class Child extends Parent { public Child() { super(); // 调用父类的无参构造方法 // ... } } ``` 2. 调用父类的有参构造方法 如果父类没有无参构造方法,或者我们希望在子构造方法调用父类的有参构造方法初始化父类成员变量,我们可以在子构造方法使用 `super(...)` 关键字调用父类的有参构造方法,如下所示: ``` public class Parent { public Parent(String name, int age) { // ... } } public class Child extends Parent { public Child(String name, int age, int grade) { super(name, age); // 调用父类的有参构造方法 // 初始化成员变量 // ... } } ``` 在上面的示例代码中,我们定义了一个 `Parent` ,其中包含了一个有参构造方法初始化两个成员变量。然后我们又定义了一个 `Child` ,继承自 `Parent` ,并且新增了一个年级属性。在 `Child` 构造方法中,我们使用 `super(name, age)` 的方式来调用父类的有参构造方法,从而初始化 `Parent` 中的两个成员变量。这样,我们就可以在 `Child` 中直接使用 `name` 和 `age` 这两个属性了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值