2021/12/3 北京 java关键字(一) super、constructor

本文探讨了Java中super关键字的作用,解释了为何在子类中需要调用父类的方法或属性。通过两个具体的情景分析,展示了super用于解决属性冲突和在构造器中的应用。当子类与父类有同名字段时,super用于区分不同含义的id。而在构造器中,super关键字用于调用父类的构造器,确保初始化过程的正确进行。总结指出,super在Java编程中扮演着不可或缺的角色,尤其是在处理继承关系时。
摘要由CSDN通过智能技术生成

以前以为super也就那样了,就是调用父类的方法或者属性嘛

实际上,既然子类继承了父类,他自己就都有父类的所有东西,为什么还要去调用父类呢?

直接给我问懵了、、、


情况一:子类有和父类同名的字段

假如父类person里定义了一个属性id是身份证号的意思;

父类person中:
int id=1002;//身份证号

那么子类student中再定义一个id是学号的意思,这时候会冲突吗?

会引起一些小小的麻烦。此时,我们只有加super.id,才能访问到身份证号。

//在子类中:
public void show(){
   System.out.println("name="+this.name+",age="+super.age);
   System.out.println("id="+this.id);//id是学号
   System.out.println("id="+super.id);//id是身份号
}

这么看着super也没啥大用处啊,不就是区分属性是自己的还是父类的嘛,

那看这个情况二:

众所周知:子类拥有父类非 private 的属性、方法。

我们想定义一个子类student的构造器,这么定义可以吗?

这时候你就会犯嘀咕了。this.name,this.age都是父类的属性。我在子类理所当然的可以拿到了。

要是父类把name,age私有化了,那你子类里怎么写构造器嘛???是个好问题吧

public Student(String name,int age,String major){
    this.name=name;//name和age都是父类的属性,这里this.name,this.age可以拿得到吗
    this.age=age;
    this.major=major;
}

解决办法是调用父类构造器有参构造器super(String name, int age)

public Student(String name,int age,String major){
    super(name,age);//这行代码必须在子类构造器的首行
    this.major=major;
}

其实,super()几乎是无处不在的,我们的构造器里要么是this()开头的,要么是super()开头的,只是一般情况下把super()省掉不写罢了

public Student(String major){
    super();//通常省略不写
    this.major=major;
}

最后献上老师的笔记


Constructor 构造器 (创建对象)

在Person类中有构造方法,而且这个方法还很特别。它的名字是类名(一般方法名都是驼峰命名),既然是方法,谁来调用?类还是对象来调用,都不是。是 new +构造器!

  1. 没有显示定义类的构造器,则系统默认提供一个空参构造器
  2. 一个类中定义多个构造器,彼此构成重载
  3. 一旦显示定义了类的构造器,系统就不会再提供默认的空参构造器
class Person{
    String name;
    int age;
    public Person(){
       System.out.println("Person()....")
    }

    public Person(n){
      name=n;
    }

    public Person(n,a){
      name=n;
      age=a;
    }
}

public class PersonTest{
    public static void main(String[] args){
      //创建类的对象:new + 构造器
      Person p=new Person();
      p.eat();
   }  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值