我有一个基类
class C1 extends Activity {
}
我有一个派生类
class C2 extends C1 {
public void init() {
}
}
我的程序从C1类开始,我应该如何调用C2的'init()'方法?
答案 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
方法,在override
中derived 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这个概念的解释。