在动态方法绑定中,超类引用只能调用由它继承和覆盖的子类方法。但是,否则可以实施。
abstract class in
{
abstract void print();
}
class a extends in
{
String name=this.getClass().getSimpleName();
void show()
{
System.out.println("class "+name);
}
void print()
{
show();
}
}
class Main
{
public static void main(String args[])
{
in x;
x = new a();
x.print();
}
}
在这里,它成功打印
一级
同样 getClass()返回子类名而不是超类名,因为这个是指main方法中的超类对象。
答案 0 :(得分:0)
未来未知今天编写类A.java
的开发人员将来永远无法预测任何其他开发人员可能在其类中扩展的方法的名称或签名{{1} }。此类也可能很多,每个类都有不同的方法。
基类不应该与其子类耦合。它一定不关心如何实现子类。
虽然不建议这样做,但是如果你想调用其中一个子类中定义的方法,你可以通过类型转换来完成,如下所示。
A.java
答案 1 :(得分:0)
父对象引用仅受其在类定义中具有的方法的约束。如果这些方法被子类覆盖,并且在运行时,如果父引用引用的实际对象是子类类型,则调用该重写方法。如果重写的方法调用最初不存在于父类中的方法或访问父类中不存在的变量,则无关紧要。
这就是多态性的全部意义所在。如果我们有不同的特定继承层次结构,其中父类不需要知道某些方法的确切实现,并且可以将子类实现为某种契约,那么它的设计意味着这样,因为它使程序扩展更容易。