super关键字

super()关键字

关键字的理解

父类中定义了该方法,但是子类中重写了该方法,使用super来修饰这个方法,在调用的时候调用父类的方法。

super关键字的使用

  • 1、super理解为父类

  • 2、super可以用来调用:属性方法和构造器

  • 3、super的使用,调用属性和方法:

    3.1、我们可以在子类的方法或者构造器中,使用super.属性或者super.方法来显示调用父类中

    声明的属性和方法,但是通常情况下,我们习惯省略“super.”

    3.2、特殊情况,当子类和父类中定义了同名的属性时,我们在子类中调用父类中声明的属性,必须

    显示的使用“super.属性”的方式,表明调用的是父类中声明的属性,在实际的开发中是不会出现同名的属性

    其中调用了super方法之后,其子类还会向父类中进行寻找,如果父类找不到,再到父类的父类中来进行寻找。(super的追溯不仅限于直接父类)

  • 3.3、特殊情况下,当子类重写了父类中的方法之后,我们想在子类的方法中调用父类中被重写的方法时:

    则必须显示的使用“super.属性”的方式,表明调用的是父类中被重写的方法。

    想要在子类中调用被重写的父类的方法时,就会用super.

  • 4、使用super来调用构造器。

    4.1、我们可以在子类的构造器中显式的使用"super(形参列表)"的方式,调用父类中声明的指定构造器。

    4.2、"super(形参列表)"的使用,必须声明在子类构造器的首行。

    4.3、我们在类的构造器中,针对于"this(形参列表)"或者"super(形参列表)"只能时二选一。

    4.4、在构造器的首行,没有显式声明"this.(形参列表)“或者"super(形参列表)”,则默认调用的是父类中空参的构造器:super()

    4.5、一个类中有n个构造器,最多有n-1个使用了this,剩下一个用的就是super。

    在类的多个构造器中,至少有一个类的构造器中使用了”super(形参列表)“,调用了父类的构造器.

    下面是该代码的示例:

Person.java:

public class Person {
    String name;
    int age;
    int id=1001;//身份证
public Person(){
	System.out.println("我无处不在");
}
public Person(String name){
    this.name=name;
}
public Person(String name,int age){
    this(name);
    this.age=age;
}
public void eat(){
    System.out.println("人吃饭");
}
public void walk(){
    System.out.println("人走路");
}
}

student.java

//父类和子类出现了同名的属性情况下,这时的属性在内存中有两个id
public class student extends Person{
  String major;
  int id=1002;//学号
  public student(){

  }
  public student(String major){
      this.major=major;
  }
  public student(String name,int age,String major) {
//	  this.name=name;
//	  this.age=age;
	  super(name,age);//代表了调用父类方法中的参数,name和age
	  this.major=major;
  }

  @Override
  public void eat() {
      System.out.println("学生吃有营养的食物");
  }
  public void study(){
      System.out.println("学生学习知识");
      this.eat();
      super.eat();
      walk();
  }
  public void show(){
      System.out.println("name=" + this.name + ",age= "+ super.age);//super.age直接在自己的父类中来进行寻找
      System.out.println("id= " + id);//这里相当于圣罗了this.
      //想获取父类的id就是用super来调用
      System.out.println("id= " + super.id);

  }}

test.java:

public class Supertset {
 public static void main(String[] args) {
    student s=new student();
    s.show();
    s.study();
    student s1=new student("Tom",21,"IT");
    s1.show();
    System.out.println("***********");
    student s2=new student();

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值