super详解 2021-06-10
Posted 超霸霸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了super详解 2021-06-10相关的知识,希望对你有一定的参考价值。
一、super的作用
super调用父类的构造方法
二、实例演练
属性和方法的调用
- 定义一个父类Person类,并定义一个name属性和一个print方法,代码如下:
//父类——Person类
public class Person {
String name="person";
public void print(){
System.out.println("person_print");
}
}
- 定义一个子类Student类,并定义一个name属性和一个print方法,同时定义两个test类用于测试,代码如下:
//子类——学生类
public class Student extends Person{
String name="student";
public void print(){
System.out.println("student_print");
}
public void test(String name){
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);
}
public void test2(){
print();
this.print();
super.print();
}
}
- 定义一个main类,创建一个student对象,代码如下:
public class main {
public static void main(String[] args) {
Student student=new Student();
student.test("jc");
student.test2();
}
}
运行结果如下:
可以看出,当子类和父类中的属性或者方法重名时,使用super和this可以很好的区分
构造器的调用
- 在子类中调用构造器
//子类——学生类
public class Student extends Person{
public Student(){
System.out.println("Student无参构造执行了");
}
}
- 在父类中调用构造器
//父类——Person类
public class Person {
public Person(){
System.out.println("Person无参构造执行了");
}
}
运行结果如下:
可以看到父类的无参构造比子类的无参构造先执行,这是因为在子类的构造器中有隐藏代码被执行了,代码如下:
public Student(){
//隐藏代码:调用了父类的无参构造
//调用父类的构造器,必须要在子类构造器的第一行
super();
System.out.println("Student无参构造执行了");
}
三、总结
super注意点:
- 子类的构造器中隐藏了父类构造器的调用,且super调用父类的构造方法,必须在构造方法的第一行
- super必须只能出现在子类的方法或者构造器中
- super和this不能同时调用构造方法
super vs this:
-
代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的应用
-
前提:
this:没有继承也能使用
super:只能在继承条件下可以使用
-
构造方法:
this:本类的构造
super:父类的构造
以上是关于super详解 2021-06-10的主要内容,如果未能解决你的问题,请参考以下文章