【发布时间】:2014-07-13 13:59:01
【问题描述】:
我只是想详细了解 java 的抽象类和接口。 我在 SO 中阅读了一些与从抽象类和接口一起覆盖和实现相同签名方法相关的问题。
之后,我只是尝试使用自己的代码更清楚地了解这个概念。 然后我遇到了几个问题:
- 如何调用抽象类中写的具体方法?
- 如果对象是
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();
}
添加
Q.3
根据以下答案之一中的建议,我可以从C 类中调用super.methodOne()。但是,如果我没有从我的具体类 C 调用 super 以从其扩展父抽象类 A 调用具体方法怎么办?而且我不想修改我的具体类C,那么我可以调用超类中的方法吗?
【问题讨论】:
-
我尝试了一些代码并提出了一些我没有找到答案的问题。
标签: java interface abstract-class overriding