超类对象是否有可能引用未继承的子类成员方法



in 动态方法binding superClass参考只能调用继承和覆盖它的子类方法。但是,否则可以实现。

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();
     }
}

在这里,它成功打印

a类

getClass((返回子类名称,而不是superClass名称为 this 指的是主要方法中的超级类对象。

父对象引用仅受其类定义中的方法的约束。如果这些方法被子类覆盖,在运行时,如果父级引用的实际对象是子类类型,则调用覆盖方法。不管被覆盖的方法调用最初在父类中不存在的方法还是访问父类中不存在的变量都没关系。

这就是多态性的全部内容。它是按设计来的,因为如果我们拥有不同的特定继承层次结构,则可以使程序扩展更加容易,而父级则不需要知道某些方法的确切实现,并且可以使子类实施的事物作为某种合同。

未来未知开发人员编写类A.java今天永远无法预测未来的名称或签名,这些方法的名称或签名A.java。同样,每个具有单独的方法可能会有很多。

基类绝不能与其子类结合。它不必关心如何实施子类。

尽管不建议这样做,但是如果您想调用一个子类中定义的方法,则可以通过下面的 typecasting 来做。

public class Parent {
    public class someMethod(){
             if( this instanceof Child1){
                 ((Child1)this).someAdditionalMethod();
             }
     }
}
public class Child1 extends Parent{
     public class someAdditionalMethod(){
    }
}

最新更新