在创建子类的实例时,有一个父类是一个抽象。
如何从父实例访问子类的方法?
class A {
//some code
}
class B extends A {
private int i = 10;
public void go() {
//some code
}
}
主类:
A a = new B();
a.go();//error
在创建子类的实例时,有一个父类是一个抽象。
如何从父实例访问子类的方法?
class A {
//some code
}
class B extends A {
private int i = 10;
public void go() {
//some code
}
}
主类:
A a = new B();
a.go();//error
将变量类型强制转换为子类:
问题是一个变量可以存储一个类的对象
A和它的其他继承者,这些继承go者没有方法。因此,可能需要先检查变量是否包含所需类的对象:一般来说,您需要类型转换这一事实是一个思考和处理代码逻辑的机会。为什么用 type 声明变量
A?总会有一个类的对象B吗?该方法不应该移动到父类吗?A在 中创建一个方法并覆盖其行为不是更好B吗?如果所有子类都有这样的方法,那么你可以在基类中声明它。
如果一个类
A没有方法,则不能从中调用另一个类的方法。但是如果你给类添加一个签名和返回值相同的方法A,那么B这个方法就会被覆盖,因此会因为多态性而被调用。如果子类没有共同的默认实现,则可以将方法和类
A抽象化,因此子类必须编写自己的实现。如果类
А不是抽象类,但包含在子类中被覆盖的方法,则方法调用将来自子类,这要归功于相同的多态性,但这种情况下的子类不需要实现或覆盖通用方法,这将有一个默认实现。为了更好地理解抽象类,您可以阅读此答案。