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

标签 java oop inheritance polymorphism extends

当我上这些课时:

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 时我会得到“我是从属对象”。我得到了 Slave.test() 的结果,但无法访问 Slave.mehh()。

那么当变量被忽略时,为什么要给它一个类型呢?或者换句话说,当绝地大师实际上是绝地奴隶时,它有什么功能来声明大师?

最佳答案

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

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

关于java - 为什么我可以创建一个父类类型的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28120111/

相关文章:

java - Spring MVC CSS 加载错误

java - Oracle 关于 JavaBean 的文档可能是错误的吗?

java - 为什么在 java 中键入带参数的构造函数时不提供默认构造函数?

php - 使用 trait 为接口(interface)定义函数的目的是什么

java - 验证 BiConsumer 作为单元测试中的方法引用

java - 如何在 Java 注释中标记代码的逻辑部分?

java - 如果 Java 中每个对象的行为不同,则实现类的最佳实践

c++ - 如何在 E_NOTIMPL 和 E_NOINTERFACE 之间进行选择?

c# - C#中基类的 `using`指令是否被子类继承?

c++ - 使用派生类的数据成员初始化基类