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 次 |
| 最近记录: |