Mag*_*ull 19 java extends this super
说我有以下课程:
class Foo {
protected void method() {}
}
class Bar extends Foo {
}
Run Code Online (Sandbox Code Playgroud)
此时,从类Bar,我可以通过method()
两种方式访问:
super.method();
this.method();
从我看来,他们似乎执行相同的行动.在这种情况下,这两者之间是否存在差异?是否有首选版本可供使用?
使用super
是有道理的,因为它method()
是超类的一部分.this
我认为使用也很有道理,因为Bar将继承Foo类的属性,因此method()
,对吧?
ern*_*t_k 18
是的,this.foo()
调用相同的方法super.foo()
.
请注意,如果foo()
在子类中重写,则会有所不同.但在这种情况下,它运行相同的方法实现.
super.foo()
当我们需要特别请求执行超类的方法实现时,我们使用当当前类中有一个可用时.
使用super是有道理的,因为method()是超类的一部分
是的,但请记住,子类可以在某个时刻更改并获得重写foo()
,在这种情况下super.foo()
可能会开始调用意外的实现.
这是值得注意的.因此,打电话this.foo()
或不合格foo()
可能是合理的.
Owe*_*wen 12
请注意,孩子可以再次被覆盖:
public class Main {
static class Foo {
protected void method() {
System.out.println("Bye");
}
}
static class Bar extends Foo {
{
this.method();
super.method();
}
}
static class Baz extends Bar {
protected void method() {
System.out.println("Hi");
}
}
public static void main(String[] args) {
new Baz();
}
}
Run Code Online (Sandbox Code Playgroud)
生产:
Hi
Bye
Run Code Online (Sandbox Code Playgroud)
所以,虽然this.method()
和super.method()
行为可能同样在某些情况下,它们不会产生相同的字节码.
归档时间: |
|
查看次数: |
1096 次 |
最近记录: |