我只是想用java详细了解抽象类和接口(interface)。 我在 SO 中读到了一些与从抽象类和接口(interface)一起重写和实现相同签名方法相关的问题。
之后,我尝试使用自己的代码来更清楚地了解这个概念。 然后我遇到了几个问题:
- 如何调用抽象类中编写的具体方法?
- 如果对象的类型为
C
,A
和I
之间是否可以进行类型转换?
我尝试过以下代码:
public class TestMethods {
public static void main(String[] args) {
C c1 = new C();
c1.methodOne();
c1.methodTwo();
// Q.1
A c2 = new C();
// HOW TO CALL METHOD IN CLASS A WITH c2
c2.methodOne(); // I want to call here methodOne() from A
// Q.2
I c3 = new C();
A c4 = (A) c3;
// WILL THIS TYPE CASTING WORKS
// HOW TO CALL METHOD IN CLASS A WITH c4
c4.methodOne();
c4.methodTwo();
}
}
class C extends A implements I{
@Override
public void methodTwo() {
System.out.println("Method Two in Concrete Class C");
}
@Override
public void methodOne(){
System.out.println("Method One in Concrete Class C");
}
}
abstract class A{
public void methodOne(){
System.out.println("Method One in Abstract Class A");
}
public abstract void methodTwo();
}
interface I{
public void methodOne();
public void methodTwo();
}
已添加
问题3
根据以下答案之一的建议,我可以从类 C
调用 super.methodOne()
。但是,如果我没有从具体类 C
调用 super 来从其扩展父抽象类 A
调用具体方法,该怎么办?我不想修改我的具体类C
,那么我可以调用父类(super class)中的方法吗?
最佳答案
- 您可以使用
super.methodOne()
调用具体方法 - 你可以将 C 转换为 A,将 C 转换为 I,而不是相反,因为 C 拥有 A 所拥有的一切,但还可以拥有更多,所以 C 是 A,但 A 不是 C。
关于java - 从父抽象类调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24723432/