我只是想用java来详细了解抽象类和接口。 我在SO中读过几个与覆盖和实现抽象类和接口相同的签名方法相关的问题。
之后我尝试使用自己的代码更清楚地学习这个概念。 然后我遇到了几个问题:
A
类型,是否可以在I
和C
之间进行类型转换?我尝试使用以下代码:
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();
}
ADDED
Q.3
根据以下答案之一中的建议,我可以从班级super.methodOne()
拨打C
。但是如果我没有从我的具体类C
调用super来从其扩展父抽象类A
调用具体方法呢?而且我不希望修改我的具体类C
,那么我能够在超类中调用该方法吗?
答案 0 :(得分:2)
super.methodOne()