当我上这些课时:
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/