Java学习日志——super关键字

 super关键字代表父类对象,主要有两个用途:
◆调用父类的构造方法;
◆访问父类的属性和方法。


1.调用父类的构造方法
    在Java中父类和子类属性的初始化过程是各自完成的,虽然构造方法不能够继承,但通过使用super关键字在子类构造方法中可以调用父类的构造方法,以便完成父类的初始化。
    以Person类和Teacher类为例,演示在子类构造方法中可以调用父类的构造方法,以便完成父类的初始化。
Person类:
public class Person{
       private String name;
       private int age;
       private String gender;
       public Person(){
              System.out.println("无参数的构造方法");
       }
       public Person(String name,int age,String gender){
               System.out.println("有参数的构造方法");
               this.name=name;
               this.age=age;
               this.gender=gender;
       }
}
Teacher类:
public class Teacher extends Person{
       private float salary;
       public Teacher(){
       }
       public Teacher(String name,int age,String gender,float salary){
              super(name,age,gender);
              this.salary=salary;
       }
}
    上述代码,再teacher类中定义了一个缺省的构造方法(不含参数的构造方法)和大四个参数的构造方法。在第二个构造方法中使用super(name,age,gender)调用父类的构造方法Person(name,age,gender),将传递过来的参数向上传递来完成从父类继承属性的初始化。

当执行下面语句时:

Teacher john=new Teacher("john",34,"male"3000);

会将name,age,gender,salary分别初始化为john,34,male,3000。

若在子类的构造方法没有明确写明调用父类构造方法,则系统会自动调用父类不带参数的构造方法,即执行“super()”。


2.访问父类的属性和方法

     除了调用直接父类的构造方法,通过在此类中使用super做前缀外,还可以引用父类中被子类隐藏(即子类中有与父类同名的属性)的属性和被子类覆盖的方法。

    当子类的属性与父类的属性同名时,可用“super.方法名(参数列表)”的方式来访问父类中的方法。
Person类:
public class Person{
       private String name;
       private int age;
       private String gender;
       public Person(){
              System.out.println("无参数的构造方法");
       }
       public Person(String name,int age,String gender){
               System.out.println("有参数的构造方法");
               this.name=name;
               this.age=age;
               this.gender=gender;
       }
       public void print(){
               //使用super.print()调用父类的print()方法
               super.print();
               System.out.println("salary:"+salary);
       }
}

Teacher类:

public class Teacher extends Person{
       private float salary;
       public Teacher(){
       }
       public Teacher(String name,int age,String gender,float salary){
              super(name,age,gender);
              this.salary=salary;
       }
       public void print(){
              //使用super.print()调用父类的print()方法
              super.print();
              System.out.println("salary:"+salary);
       }
}
        上述代码在Teacher类的print()方法内部使用super.print()调用了父类Person的print()方法,从而实现复用。在main()方法中,执行下列代码:
Teacher john=new Teacher("john",34,"male",3000);
john.print();
执行结果如下:
有参数的构造方法
name:john
age:34
gender:male
salary:3000.0
      从结果可以看到,在Teacher的print()方法中,通过super.print()调用了父类Person的print()方法,从而输出了name,age,gender属性的内容。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值