java继承之二(super核心关键字)

注:当其他类创建某个类的对象时这个类有继承父类的话,那往往父类的代码会优先执行,因为创建子类对象时,在子类的构造器,会隐式的调用父类的构造器。当你想把隐式调用父类的构造器写成显示调用时

  请记住,父类的调用一定要放在构造器代码中的第一行。如下:

public class Prao extends Stud{
//举例:当构造器我们使用的是系统默认提供的空参构造器时,那他的内部会多一行super.Stud();的代码,这是用来调用父类构造器的
public Prao(){
super.Stud();//必须写在构造器内的第一行,而且只能写this或super其中的一个,要么调用父类要么调用子类,因为他们两个都是要写在第一行,所以不能同时出现
System.out.println("运行了Prao构造器");

public static void main(String []args){
     //当这个代码现在直接运行时,先打印出来的是运行了Stud构造器
     Stud st=new Stud();

}
}

}
class Stud{
public Strud(){
System.out.println("运行了Stud构造器");
}
}

 

i

//实现通过用其他从子类调用父类的方法及属性
//其他类
public class Main {
    public static void main(String[] args) {
        //创建子类对象,然后进行调用方法
        Studed st=new Studed();
        st.test("其他类");
        st.test1();
        }
    
}
//父类
class  Person {
    protected String name="父类";//在父类中创建一个属性然后实现让其他类从子类中获取这个属性内容
    
    public void prin(){
        System.out.println("Person");
    }
    
}
//子类
class Studed extends Person{
    protected String name="子类";//在子类创建属性,然后实现让其他类获取内容
    public void test(String name){
        System.out.println(name);//打印传入的参数内容
        System.out.println(this.name);//打印当前类的name属性值
        System.out.println(super.name);//当前类的父类是谁,就打印父类的name属性值
    }
    
    public void test1(){
             prin();//调用当前类的,prin方法(隐式调用)
        this.prin();//调用当前类的,prin方法(显示调用)
        super.prin();//当前类的父类是谁,就调用父类的方法
    }
    public void prin(){
        System.out.println("Studed");
    }
    
    
}

super注意点:

  1.super调用父类的构造方法,必须在构造方法的第一个

  2.super 必须只能出现在子类的方法或者构造方法中

  3.super和this不能同时调用构造方法

对比this:

  代表的对象不同:  

    this:本身调用者这个对象

    super:代表父类对象的引用

  前提:

    this:没有继承也可以使用

    super:只能在继承条件下才可以使用

  构造方法:

    this(); 本类的构造

    super();父类的构造

 


super关键字的使用:
super理解为:父类的
siper :可以调用:方法、属性、构造器
super的使用:方法、属性
我们可以在子类的方法或构造器中。通过使用“spuer.属性“或”super.方法“的方法,显式的调用父类中声明的属性或方法,但通常情况我们习惯省略”super.“。
特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的使用“super.属性”的方式,表明调用的是父类中声明的属性
特殊情况:子类重写了父类中的方法以后,我们想在子类的方法中调用父类中的方法时,则必须显式的使用“super.方法”,表明调用的是父类中声明的方法
super调用构造器:
我们可以在子类的构造器中显式的使用“super(形参列表)“的方式,调用父类中声明的指定的构造器
“super(形参列表)“的使用,必须声明在子类构造器的首行
我们在类的构造器中,针对“this(形参列表或“super(形参列表)“只能二选一,不能同时出现。
在构造器的首行,没有显式的声明“this(形参列表或“super(形参列表)“则默认调用父类中空参的构造器:super();
在类的多个构造器中至少有一个类的构造器使用了“super(形参列表)“,调用父类中的构造器

 

posted @ 2022-03-31 17:12  hollg  阅读(44)  评论(0)    收藏  举报