【发布时间】:2012-08-15 07:05:47
【问题描述】:
假设我有一堂课
public class Base {}
还有一个子类
public class Derived extends Base {
public void Foo(Object i){
System.out.println("derived - object");
}
}
主类
public class Main {
public static void main(String[] args) {
Derived d = new Derived();
int i = 5;
d.Foo(i);
}
}
在控制台中我们会看到 派生 - 对象
一段时间后,我想像这样修改我的超类:
public class Base {
public void Foo(int i) {
System.out.println("base - int");
}
}
现在如果我运行我的程序,我会看到:
base - int
那么我可以让超类中的方法在我的子类中不可用吗? 结果我想看到派生的-对象。
我看到有些人不明白我想要什么,所以我会尽力解释:
我只想修改超类,我不想修改我的子类。例如,如果我将用我的超类制作 jar 并用我的孩子制作 jar。我不想改变所有的罐子..我想将方法添加到超类中并使其可用于超类.. 还有这样的代码
public class Main {
public static void main(String[] args) {
Derived d = new Derived();
int i = 5;
d.Foo(i);
Base b = new Base();
b.Foo(i);
}
}
给我
派生 - 对象 基数 - 整数
【问题讨论】:
-
我知道c++和c#有一些功能可以帮助解决这个问题,但我不知道如何在java中实现
-
你可能想看看这篇文章:[SO: stackoverflow.com/questions/2589146/… [1]: stackoverflow.com/questions/2589146/…
-
使用
@Override注释也可能会有所帮助,以便您在编译时知道您实际上是在覆盖基方法。 -
现在您尝试与覆盖/重载、继承和装箱/拆箱作斗争。通常这是一个坏主意。您可以尝试发现 Java 语言规范,以完全了解编译器如何决定它应该使用的确切方法。也许你能以某种方式解决你的问题,但如果你这样做了,你的 API 将很难理解。
标签: java inheritance polymorphism