pak*_*ore 257
super()
调用没有参数的父构造函数.
它也可以用于参数.即super(argument1)
它将调用接受类型argument1
(如果存在)的1个参数的构造函数.
它也可用于从父级调用方法.即super.aMethod()
更多信息和教程在这里
Sim*_*tes 151
一些事实:
super()
用于调用直接父级.super()
可以与实例成员一起使用,即实例变量和实例方法.super()
可以在构造函数中用于调用父类的构造函数.好的,现在让我们实际上实现这些要点super()
.
查看程序1和2之间的区别.这里,程序2证明了我们super()
在Java中的第一个语句.
计划1
class Base
{
int a = 100;
}
class Sup1 extends Base
{
int a = 200;
void Show()
{
System.out.println(a);
System.out.println(a);
}
public static void main(String[] args)
{
new Sup1().Show();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
200
200
现在查看程序2并尝试找出主要区别.
计划2
class Base
{
int a = 100;
}
class Sup2 extends Base
{
int a = 200;
void Show()
{
System.out.println(super.a);
System.out.println(a);
}
public static void main(String[] args)
{
new Sup2().Show();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
100
200
在程序1中,输出仅是派生类.它无法打印基类和父类的变量.但是在程序2中,我们在打印输出时使用super()
变量a
,而不是打印a
派生类的变量值,而是打印a
基类变量的值.因此,它证明super()
用于呼叫直接父母.
好的,现在查看程序3和程序4之间的区别.
计划3
class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}
class Sup3 extends Base
{
int a = 200;
void Show()
{
System.out.println(a);
}
public static void Main(String[] args)
{
new Sup3().Show();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
200
这里的输出是200.当我们调用时Show()
,调用Show()
派生类的函数.但是如果我们想要调用Show()
父类的函数,我们应该怎么做?查看程序4以获得解决方案.
计划4
class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}
class Sup4 extends Base
{
int a = 200;
void Show()
{
super.Show();
System.out.println(a);
}
public static void Main(String[] args)
{
new Sup4().Show();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
100
200
这里我们得到两个输出,100和200.当Show()
调用派生类的函数时,它首先调用Show()
父类的Show()
函数,因为在派生类的函数内部,我们Show()
通过put函数调用父类的函数super
函数名前的关键字.
aio*_*obe 36
是.super(...)
将调用超类的构造函数.
看看这个例子:
class Animal {
public Animal(String arg) {
System.out.println("Constructing an animal: " + arg);
}
}
class Dog extends Animal {
public Dog() {
super("From Dog constructor");
System.out.println("Constructing a dog.");
}
}
public class Test {
public static void main(String[] a) {
new Dog();
}
}
Run Code Online (Sandbox Code Playgroud)
打印:
Constructing an animal: From Dog constructor
Constructing a dog.
Run Code Online (Sandbox Code Playgroud)
调用无参数超级构造函数只是浪费屏幕空间和程序员时间.无论你是否编写代码,编译器都会生成完全相同的代码.
class Explicit() {
Explicit() {
super();
}
}
class Implicit {
Implicit() {
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
480583 次 |
最近记录: |