mut*_*y91 77 java inheritance super
我目前正在学习Java课程中的类继承,我不知道何时使用该super()
调用?
编辑:
我发现了这个代码示例:super.variable
class A
{
int k = 10;
}
class Test extends A
{
public void m() {
System.out.println(super.k);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我理解在这里,您必须使用super
访问k
超类中的变量.但是,在任何其他情况下,做super();
什么?在其自己的?
Mar*_*ers 135
调用究竟 super()
是总是多余的.它明确地做了一些隐含的事情.那是因为如果省略对超级构造函数的调用,无论如何都会自动调用无参数的超级构造函数.不是说这是不好的风格; 有些人喜欢明白.
但是,当超级构造函数获取要从子类传入的参数时,它变得有用.
public class Animal {
private final String noise;
protected Animal(String noise) {
this.noise = noise;
}
public void makeNoise() {
System.out.println(noise);
}
}
public class Pig extends Animal {
public Pig() {
super("Oink");
}
}
Run Code Online (Sandbox Code Playgroud)
小智 22
super
当您想要在子类中重写方法时从父类调用方法时,也可以在子类中使用该关键字.
例:
public class CellPhone {
public void print() {
System.out.println("I'm a cellphone");
}
}
public class TouchPhone extends CellPhone {
@Override
public void print() {
super.print();
System.out.println("I'm a touch screen cellphone");
}
public static void main (strings[] args) {
TouchPhone p = new TouchPhone();
p.print();
}
}
Run Code Online (Sandbox Code Playgroud)
这里,该行super.print()
调用print()
超类的方法CellPhone
.输出将是:
I'm a cellphone
I'm a touch screen cellphone
Run Code Online (Sandbox Code Playgroud)
当你想要调用超类构造函数时 - 初始化其中的字段.看看这篇文章,了解何时使用它:
http://download.oracle.com/javase/tutorial/java/IandI/super.html
您可以将它用作子类构造函数的第一行来调用其父类的构造函数.
例如:
public class TheSuper{
public TheSuper(){
eatCake();
}
}
public class TheSub extends TheSuper{
public TheSub(){
super();
eatMoreCake();
}
}
Run Code Online (Sandbox Code Playgroud)
构造一个实例TheSub
会调用eatCake()
和eatMoreCake()