[英]Java static methods overriding and interfaces
我有一个方法A接口getT()
abstract B class
与方法getS()
和class C
,其延伸B class
,其implements A interface
。 我从C
子类中的A
接口和B
超类重写方法。 然后在main
方法中,如果A
像这样,我将C
类实例化为typeo: A obj = new C();
我'能够调用getT()
从obj
,但不能调用getS()
方法。 如何从obj
调用getS()
方法,但不能更改obj
的类型,它必须是A
这是代码:
接口A:
public interface A {
public String getT();
}
抽象类B:
public abstract class B implements A {
public abstract String getS();
}
子类C:
public class C extends B {
@Override
public String getT() {
System.out.println("method getT() from C class");
return null;
}
@Override
public String getS() {
return null;
}
}
以及T类内部的主要方法:
public class T {
public static void main(String[] args) {
A obj = new C();
obj.getT();
}
}
对于类型为A
的引用变量,您不能调用getS()
,因为它可以是任何实现A
类型,例如AImplementer
,而不是从B
扩展而来。 任何A
对象不一定都具有getS()
方法。 仅保证具有getT()
方法。
如果obj
必须是类型A
并且您需要调用getS()
,则在A
接口的定义中包括getS()
方法:
public interface A {
public String getT();
public String getS(); // Add this line.
}
那么B
仍然是A
,您可以在A
参考变量上调用getS()
。
顺便说一句,我在您的代码中看不到任何static
方法。 静态方法不能被覆盖。
要访问该方法,您需要将obj向下转换为B。
因此,您可以:
((B)obj).getS();
下调: http : //www.programmerinterview.com/index.php/java-questions/downcasting-in-java/
obj的类型类是A,但是A没有方法getS(),因此您不能在main方法中调用。 obj必须是B类或C类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.