从父抽象类调用方法

时间:2014-07-13 13:59:02

标签: java interface abstract-class method-overriding

我只是想用java来详细了解抽象类和接口。 我在SO中读过几个与覆盖和实现抽象类和接口相同的签名方法相关的问题。

参考文献:OneTwo

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

  1. 我如何调用用Abstract类编写的具体方法?
  2. 如果对象属于A类型,是否可以在IC之间进行类型转换?
  3. 我尝试使用以下代码:

    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,那么我能够在超类中调用该方法吗?

1 个答案:

答案 0 :(得分:2)

  1. 您可以使用super.methodOne()
  2. 调用具体方法
  3. 你可以将C转换为A和C转换为I,而不是相反,因为C具有A所具有但可以有更多的所有内容,因此C是A但A不是C.