欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

1.10(java学习笔记)super关键字

程序员文章站 2022-03-25 21:57:26
supe主要是调用父类中被重写的方法及属性。 用下列代码那说明: 还有一个知识点就是,所有类的第一句都隐含一个super(),写于不写(不写编译器会自动加上)都是这句话。;意思是调用父类的无参构造方法。 用下面代码说明: 我们会发现,我们只创建了一个Studetn类的对象,应该只调用Student的 ......

supe主要是调用父类中被重写的方法及属性。

用下列代码那说明:

 

package cn.hcf.TestSuper;

public class TestSuper {
    public static void main(String[] args){
        Student stu = new Student();
        stu.task();
    }
}

class Person{
    int ID;
    void task(){
        ID = 100;
        System.out.println("工作");
    }
}

class Student extends Person{
    int ID;
    void task(){            //task方法已被子类重写
        ID = 200;
        super.task();       //通过super调用父类中的task方法,应打印“工作”。
        System.out.println("学习");
        System.out.println("Person:" + super.ID + "\n" + "Student:" + ID);  //super是父类中ID的值应为100
    }    
}

 

运行结果:
工作
学习
Person:100
Student:200

 

还有一个知识点就是,所有类的第一句都隐含一个super(),写于不写(不写编译器会自动加上)都是这句话。;意思是调用父类的无参构造方法。

用下面代码说明:

 

 1 package cn.hcf.TestSuper;
 2 
 3 public class TestSuper {
 4     public static void main(String[] args){
 5         Student stu = new Student();
 6         
 7     }
 8 }
 9 
10 class Person{
11     public Person(){
//super(); 隐含的 12 System.out.println("Person"); 13 } 14 } 15 16 class Student extends Person{
//super(); 隐含的 17 public Student(){ 18 System.out.println("Student"); 19 } 20 }
运行结果:
Person
Student

我们会发现,我们只创建了一个Studetn类的对象,应该只调用Student的无参构造方法,可是最后它也调用了Person的无参构造方法。

这是因为每一个类的第一句都隐含了一句super();所以是层层向上追溯,直到Oject类。

所以以我们这代码为例,层层向上追溯,最先创建好的是Object,然后创建Person,person包裹object,再创建Student,student包裹person,这样层层包裹。

 

 

 1.10(java学习笔记)super关键字