如何解决如何访问超类 toString 方法?
public class override {
public static void main(String[] args) {
c1 obj = new c1();
System.out.println(obj);
}
}
class a1 {
public String toString (){
return "this is clas a";
}
}
class b1 extends a1{
public String toString (){
return "this is clas b";
}
}
class c1 extends b1{
public String toString (){
return super.toString() + "\nthis is clas c";
}
}
我需要访问 a1
子类中的超类 toString
c1
方法。有什么办法可以做到。我正在学习 java,任何帮助都会是一个很好的支持。
解决方法
基本上你不能 - 你不能直接访问“祖父母”,只有在允许你这样做的情况下才能通过父母访问。
类 b1
有一个 toString
定义,它不调用 super.toString
所以它的类 b1
决定“覆盖”祖父母 (a1) 的功能toString
方法。由于 c1
类扩展了 b1
- 您只能“看到”这个被覆盖的版本,而不是 toString
的 a1
版本。
现在实际上如果你需要这个功能(让我们假设它不是 toString 而是一些所有孩子都需要的代码,你可以执行以下操作:
class a1 {
protected String commonReusableMethod() {
return "this is clas a";
}
public String toString (){
return commonReusableMethod();
}
}
class b1 extends a1{
public String toString (){
return "this is clas b";
}
}
class c1 extends b1{
public String toString (){
return super.toString() + "\nthis is clas c" + "\n" +
commonReusableMethod(); // you can call this method from here
}
}
请注意 commonReusableMethod
的定义 - 它是 protected
,因此您可以从层次结构中的任何位置(从 a1
、b1
、c1
)调用它
如果您不想允许覆盖此受保护的方法,还可以添加 final
:
protected final commonReusableMethod() {...}
,
您可能想要super.super.toString()
之类的东西。但这在java中是不允许的。所以你可以简单地使用它两次:
public class override {
public static void main(String[] args) {
c1 obj = new c1();
System.out.println(obj);
}
}
class a1 {
public String toString (){
return "this is clas a";
}
}
class b1 extends a1{
public String toString (){
return "this is clas b";
}
public String superToString(){
return super.toString();
}
}
class c1 extends b1{
public String toString (){
return super.superToString() + "\nthis is clas c";
}
}
This Question 也可能有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。