• this和super


    this和super的区别?
    分别是什么呢?
    this代表本类对应的引用。
    super代表父类存储空间的标识(可以理解为父类引用,可以操作父类的成员)

    怎么用呢?
    A:调用成员变量
    this.成员变量 调用本类的成员变量
    super.成员变量 调用父类的成员变量
    B:调用构造方法
    this(...) 调用本类的构造方法
    super(...) 调用父类的构造方法
    C:调用成员方法
    this.成员方法 调用本类的成员方法(静态方法不能用this调用)
    super.成员方法 调用父类的成员方法

    class Father {
    	public int num = 10;
    }
    
    class Son extends Father {
    	public int num = 20;
    	
    	public void show() {
    		int num = 30;
    		System.out.println(num);
    		System.out.println(this.num);
    		System.out.println(super.num);
    	}
    }
    
    class ExtendsDemo5 {
    	public static void main(String[] args) {
    		Son s = new Son();
    		s.show();
    	}
    }
    

      

    继承中构造方法的关系
    A:子类中所有的构造方法默认都会访问父类中空参数的构造方法
    B:为什么呢?
    因为子类会继承父类中的数据,可能还会使用父类的数据。
    所以,子类初始化之前,一定要先完成父类数据的初始化。

    注意:子类每一个构造方法的第一条语句默认都是:super();

    class Father {
    	int age;
    
    	public Father() {
    		System.out.println("Father的无参构造方法");
    	}
    	
    	public Father(String name) {
    		System.out.println("Father的带参构造方法");
    	}
    }
    
    class Son extends Father {
    	public Son() {
    		//super();
    		System.out.println("Son的无参构造方法");
    	}
    	
    	public Son(String name) {
    		//super();
    		System.out.println("Son的带参构造方法");
    	}
    }	
    
    class ExtendsDemo6 {
    	public static void main(String[] args) {
    		//创建对象
    		Son s = new Son();
    		System.out.println("------------");
    		Son s2 = new Son("jeck");
    	}
    }

    如果父类没有无参构造方法,那么子类的构造方法会出现什么现象呢?
    报错。
    如何解决呢?
    A:在父类中加一个无参构造方法
    B:通过使用super关键字去显示的调用父类的带参构造方法
    C:子类通过this去调用本类的其他构造方法
    子类中一定要有一个去访问了父类的构造方法,否则父类数据就没有初始化。

    注意事项:
    this(...)或者super(...)必须出现在第一条语句上。
    如果不是放在第一条语句上,就可能对父类的数据进行了多次初始化。

    class Father {
    	/*
    	public Father() {
    		System.out.println("Father的无参构造方法");
    	}
    	*/
    	
    	public Father(String name) {
    		System.out.println("Father的带参构造方法");
    	}
    }
    
    class Son extends Father {
    	public Son() {
    		super("随便给");
    		System.out.println("Son的无参构造方法");
    		//super("随便给");
    	}
    	
    	public Son(String name) {
    		//super("随便给");
    		this();
    		System.out.println("Son的带参构造方法");
    	}
    }
    
    class ExtendsDemo7 {
    	public static void main(String[] args) {
    		Son s = new Son();
    		System.out.println("----------------");
    		Son ss = new Son("jeck");
    	}
    }
    

      

  • 相关阅读:
    状态压缩dp未吃透の笔记
    洛谷blog传送门qwq
    线段树学习总结(Do not be the cheater)
    第三届NOI Online普及组线上比赛赛后总结
    第三届NOI Online入门组第三题 手表(watch)题解
    P1162 填涂颜色 题解(勿抄袭)
    4980:拯救行动 题解
    P1433 吃奶酪 题解(勿抄袭)
    Mysql-多表数据记录查询
    java-多线程
  • 原文地址:https://www.cnblogs.com/ysg520/p/9560500.html
Copyright © 2020-2023  润新知