继承中的super,this使用
this 和 super 的区别
注意点:
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中。
- super和this不能同时调用构造方法
区别:
- 首先,this和super代表的对象不同
- this:本身调用本类的对象
- super:代表父类兑现的应用
- 前提:
- this:没有继承可以使用,因为指表示this在该类的对象
- super:必须出现在继承后的子类中。
- 构造:
- this():本类的构造
- super():父类的构造
super的使用
package com.Test;
/*
父类
*/
public class One {
public One(){
System.out.println("One父类的无参构造!");
}
protected String name = "张三"; // 父类属性
public void test1(){
System.out.println(name+":学Java使我快乐!"); // 父类方法
}
}
package com.Test;
/*
子类
继承父类
*/
public class Two extends One {
public Two(){
System.out.println("Two子类的无参构造!");
}
public void print(){
System.out.println(super.name);
// 使用 super 拿到父类的属性 注意:要定义方法将属性输出调用
}
public void test2(){
this.print(); // 调用本类的print()方法
super.test1(); // 使用super拿到父类方法 (也是自定义方法进行调用)
}
}
package com.Test;
/*
测试类
*/
public class Test {
public static void main(String[] args) {
Two t = new Two(); // 通过new关键字进行初始化子类利用继承可以拿到父类的所有属性以及方法
t.print();
t.test2();
}
}
输出:
One父类的无参构造!
Two子类的无参构造!
张三
张三
张三:学Java使我快乐!
注意:很显然上面的测试类中new的是Two(子类)但是程序先输出的是One(父类的构造)这其中把一行代码隐藏了,就是在Two类中的构造方法里面默认执行了一个super();所以就调用了父类中的无参构造。
protected:可以被子类使用,以及同包下的类使用,不公开(只是仅限于子类和同包下的类使用)。