从Base类Java访问Child类方法

时间:2017-12-02 09:29:51

标签: java oop inheritance

我有一个基类

class C1 extends Activity {

}

我有一个派生类

class C2 extends C1 {
    public void init() {

    }
}

我的程序从C1类开始,我应该如何调用C2的'init()'方法?

2 个答案:

答案 0 :(得分:1)

这是从derived类调用parent类方法的技巧:

public class Parent {

    public Parent() {
        speak(); // call private methods in constructor if you need
    }

    void speak() {
        System.out.println("Parent speak implementation");
    }
}   

public class Child extends Parent {

    public Child() {
        super();
    }

    @Override
    void speak() {
        System.out.println("Child speak implementation");
    }
}

public class Demo {

    public static void main(String[] args) {
        Parent c = new Child();
    }   
}    

不推荐,你应该避免!正确的方法是在您的init()中声明super class, C1方法,在overridederived class, C2声明,并按以下方式调用:

C1 c1 = new C2();
c1.init(); // will be called init method of C2 class  

我看到你从Activity课程延伸,我认为这是来自Android。如果是这样,我会建议您尝试按以下步骤操作:

public abstract class C1 extends Activity {
    protected abstract void init();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_c1);

        // your logic
    }
}

public class C2 extends C1 {

    @Override
    protected void init() {
        // your logic
    }
}

在您的清单文件中声明您的main activity如下:

<activity android:name=".C2">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity> 

答案 1 :(得分:0)

如果您希望通过实例化类C2的对象来访问类C1,则由于继承规则,您无法这样做。
编辑:我可以给你一个具体的例子:Car是Vehicle的子类,所以当你创建Vehicle类时,你还没有Car,因为它取决于Vehicle的存在。
因此,在您的情况下,由于班级C2取决于班级C1的存在,因此您无法从班级C2调用班级C1的方法。 我相信你必须获得完整的继承概念才能理解OOP是如何工作的,所以我建议你看一下this book这个概念的解释。