- super指代的是父类,和this指代的本类相对应
- superVS this:
- 代表的对象不同
- this:本身调用者这个对象
- super:代表父类对象的应用
- 前提:
- this:没有继承也可以使用
- super:只能在继承条件下才能使用
- 构造方法:
- this():本类的构造
- super(): 父类的构造
- 代表的对象不同
-
super注意点:
- super显式调用父类的构造方法时,必须在构造方法的第一个
- super只能出现在子类的方法或者构造方法中!
- super和this不能同时调用构造方法,会有冲突
private修饰的方法和属性无法被继承
子类代码存在隐藏默认构造器,即调用父类的构造器。若父类构造器未被很好的定义,则子类无法定义构造器
protected关键字表示可以被子类访问和修改,但是不能被其他类访问和修改,但是也可以通过get和set方法操作
-
个人理解:
- 继承之后子类可以使用所有父类的非private关键字修饰的属性和方法。当然子类也可以自己定义自己的属性和方法。当自己的属性和方法与父类重名的时候,可以用this和super来区分
-
还是来看一下student类的demo
package oop.demo05;
public class Student extends Person {
//构造器
public Student(){
//隐藏代码:调用父类的无参构造
//super(); 调用父类构造器必须在子类构造器第一行
System.out.println("Student无参构造执行");
}
//子类的私有属性
private String name = "枸仙";
//子类的私有方法
public void print(){
System.out.println("Student");
}
public void test(String name){
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);
}
public void test1(){
print();
this.print();
super.print();
}
}
- 再看一下父类Person类的demo
package oop.demo05;
public class Person {
//父类的无参构造器
public Person(){
System.out.println("Person无参构造执行");
}
//父类的受保护的属性(可以被子类访问)
protected String name = "gqxr";
//父类的方法
public void print(){
System.out.println("Person");
}
}
- 来看一下main函数的输出
package oop;
import oop.demo05.Person;
import oop.demo05.Student;
public class Application {
public static void main(String[] args) {
Student student1 = new Student();
student1.test("枸杞仙人");
student1.test1();
}
}
//结果:
Person无参构造执行
Student无参构造执行
枸杞仙人
枸仙
gqxr
Student
Student
Person