如何访问超类的 toString 方法?
How can I access the superclass toString method?
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";
}
}
我需要访问 c1
子类中的超类 a1
toString
方法。有什么办法吗。我正在学习java,任何帮助都会是一个很好的支持。
基本上你不能 - 你不能直接访问“grandparent”,只能通过 parent 如果它允许你这样做。
Class b1
有一个 toString
定义不调用 super.toString
所以它的 class b1
决定“覆盖”grandparent 的 (a1) toString
方法的功能。由于 class c1
扩展了 b1
- 你“看到”的只是这个被覆盖的版本,而不是 a1
.
的 toString
版本
现在实际上,如果您需要这个功能(假设它不是 toString,而是所有 children 中可能需要的一些代码,您可以执行以下操作:
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 也可能有帮助。
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";
}
}
我需要访问 c1
子类中的超类 a1
toString
方法。有什么办法吗。我正在学习java,任何帮助都会是一个很好的支持。
基本上你不能 - 你不能直接访问“grandparent”,只能通过 parent 如果它允许你这样做。
Class b1
有一个 toString
定义不调用 super.toString
所以它的 class b1
决定“覆盖”grandparent 的 (a1) toString
方法的功能。由于 class c1
扩展了 b1
- 你“看到”的只是这个被覆盖的版本,而不是 a1
.
toString
版本
现在实际上,如果您需要这个功能(假设它不是 toString,而是所有 children 中可能需要的一些代码,您可以执行以下操作:
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 也可能有帮助。