10 super 讲解

super 讲解

image

package com.zhan.base05Oop;

public class Test10 {

    // 区别 有无 this.
    // 区别 this.(指向当前类或者当前对象的属性和方法) 和 super. (指向父类的属性或者方法)

    /*
    super 注意点
      1. super()/super(参数); 调用父类的构造器,必须要在子类构造器的第一行
      2. super 关键字只能出现在子类里面而不能出现在父类里面
      3. 不能同时使用 super()/ super(参数)和this()/this(参数) 来调用构造器

    super  VS this
  1. 区别 this.(指向当前类或者当前对象的属性和方法) 和 super. (指向父类的属性或者方法)
  2. this :没有继承关系也能使用
     super : 必须要有继承关系,才能且只能在子类中使用
  3. this()/this(参数); 调用本类的构造器
     super()/super(参数); 调用父类的构造器

     */

    public static void main(String[] args) {

        Son1 son1 = new Son1();  // 有构造器的话,先执行父类的构造器
        son1.printName("zjh");
        son1.test();

    }
}





class Father1 {

    // 父类的构造器
    public Father1(){
        this(3);    // 调用自身的构造器
        System.out.println("这是父类的无参构造器");
    }
    public Father1(int a){  // 参数随便写的
        System.out.println("这是父类的有参构造器");
    }

    protected String name="詹建海";
    public void print(){
        System.out.println("这是父类的方法");
    }
}

class Son1 extends Father1{

    // 子类的构造器
    public Son1(){
        // 隐藏代码 super(); :默认调用了父类的无参构造器
        // super(); // 调用了父类的无参构造器,必须要在子类构造器的第一行    这里的super();可以不写,可以不说明也行
        super(3);  // 调用了父类的有参构造器,必须要说明才行 
                      // 父类是有参构造器的话,子类必须写明父类的有参构造器,不然的话会报错
        System.out.println("这是子类的构造器");
    }
    private String name="大帅哥";
    public void print(){
        System.out.println("这是子类的方法");
    }

    public void test(){  // 在方法中调用方法
        print();          // 当前类的方法
        this.print();     // 子类的(当前类的)方法
        super.print();    // 父类的方法
    }
    public void printName(String name){
        System.out.println(name);            // 形参
        System.out.println(this.name);       // this. 这个类的对象的name
        System.out.println(super.name);      // super.  父类的 name
    }
}
posted @   被占用的小海海  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示