java - 从父抽象类调用方法

标签 java interface abstract-class overriding

我只是想用java详细了解抽象类和接口(interface)。 我在 SO 中读到了一些与从抽象类和接口(interface)一起重写和实现相同签名方法相关的问题。

引用文献:One , Two

之后,我尝试使用自己的代码来更清楚地了解这个概念。 然后我遇到了几个问题:

  1. 如何调用抽象类中编写的具体方法?
  2. 如果对象的类型为 CAI 之间是否可以进行类型转换?

我尝试过以下代码:

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)中的方法吗?

最佳答案

  1. 您可以使用super.methodOne()调用具体方法
  2. 你可以将 C 转换为 A,将 C 转换为 I,而不是相反,因为 C 拥有 A 所拥有的一切,但还可以拥有更多,所以 C 是 A,但 A 不是 C。

关于java - 从父抽象类调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24723432/

相关文章:

java - 在抽象类方法中调用接口(interface)方法

java - 助手/实用程序类应该是抽象的吗?

java - 我不知道如何在不禁用建议代码弹出窗口的情况下禁用 Netbean 的代码完成

java - 内部类的不同实例的 hashCode 可以相同吗?

java - 在 Java 中向接口(interface)添加不变量

c# - 将派生类转换为 C# 中的另一个派生类

java - 抽象类的具体用途是什么?

java - 如何控制库类的 Jackson 序列化

java - 存储运行时之间的映射

python - 这个接口(interface)语法在python中是什么意思?