假设您有一些 Java 代码,如下所示:
public class Base{
public void m(int x){
// code
}
}
然后是一个子类 Derived,它扩展 Base 如下:
public class Derived extends Base{
public void m(int x){ //this is overriding
// code
}
public void m(double x){ //this is overloading
// code
}
}
然后你有一些声明如下:
Base b = new Base();
Base d = new Derived();
Derived e = new Derived();
b.m(5); //works
d.m(6); //works
d.m(7.0); //does not compile
e.m(8.0); //works
对于无法编译的那个,我知道您正在将一个 double 传递给 Base 的 m 方法版本,但我不明白的是......拥有像“Base b = new”这样的声明有什么意义衍生的();” ?
这似乎是解决各种类型转换问题的好方法,如果你想使用 Derived 对象,为什么不直接使用像“e”这样的声明呢?
另外,我对Java中使用的“类型”一词的含义有些困惑。今年夏天早些时候我学到的方法是,每个对象都有一个类,它对应于实例化对象时“new”后面的类的名称,但是一个对象可以有任意多的类型。例如,“e”的类型为 Base、Derived(和 Object ;)),但它的类是 Derived。这个对吗?
此外,如果 Derived 实现了一个名为 CanDoMath 的接口(同时仍在扩展 Base),那么说它具有“CanDoMath”类型以及 Base、Derived 和 Object 是否正确?