为什么我可以创建一个父类型为 class 的变量

Why can I create an variable with type of parent class

当我有这些时 类:

public class Master{

    public String test(){
        return "I am the master object";
    }

    public String boeh(){
        return "Only inside master";
    }

}

public class Slave extends Master{

    public String test(){
        return "I am the slave object";
    }

    public String mehh(){
        return "Only insde slave";
    }

}

我知道我可以这样做:Master jedi = new Slave()(因为 Slave 是 Master 的子类型)。

而且因为我可以...为什么我在变量设置为 Master 时得到 "I am the slave object"。我得到了 Slave.test() 的结果,但无法访问 Slave.mehh()。

那么当变量忽略了这个原因时,为什么要给它一个类型呢?或者换句话说,当 Master jedi 实际上是 Slave jedi 时,声明 Master 有什么功能?

因为继承的工作方式。如果一个方法被 slave 复制(你复制 test 方法的方式),它的 slave 版本总是优先的。你不能访问mehh的原因是因为它不在Master中,所以程序找不到它。如果要使用Master和Slave的所有方法,做Slave s = new Slave();.

这称为多态性(事实上,它是我们使用面向对象编程的主要原因之一)。它允许您从基类型变量调用不同的方法(在相同的签名下),而无需事先知道所包含对象的类型。因此,这允许您拥有更抽象的代码(不密切依赖于其部分的确切实现的代码)。

如果您希望根据它们的运行时类型(它们的实际类型)动态分派这些方法,您可以使用实例方法。如果您希望这些方法根据它们的编译时类型(您分配给它们的变量的类型)进行静态分派,您可以改用静态方法。