Tag: 覆盖

重载和重载方法中的多态性

我们来看看这个简单的Java代码: public class Animal { public void eat() { System.out.println(“Generic Animal Eating Generically”); } } public class Horse extends Animal { public void eat() { System.out.println(“Horse eating hay “); } public void eat(String s) { System.out.println(“Horse eating ” + s); } } 我试图找出三个eat()方法的哪个版本将运行。 现在,当我打字 Animal a = new Animal(); a.eat(); 输出是“Generic Animal Eating Generically”,这是完全可以理解的。 输入时会发生同样的事情: […]

Java中的函数覆盖 – 重载

覆盖和重载有什么区别?

Java:如何查找是否从基类重写了一个方法?

如何查明子类是否覆盖了某个方法? 例如, public class Test { static public class B { public String m() {return “From B”;}; } static public class B1 extends B { } static public class B2 extends B { public String m() {return “from B2”;}; } /** * @param args * @throws FileNotFoundException */ public static void main(String[] args) { B […]

为什么Java中的逆变参数类型不允许覆盖?

覆盖超类的方法时,Java允许返回类型是协变的。 为什么在重写方法时不允许使用逆变参数类型?

在java中覆盖具有不同返回类型的方法?

我读过一本书,它说我可以覆盖一个方法,如果它有相同的签名。 根据书中方法的签名是Method_Name + Parameters传递。 根据本书,我可以覆盖具有不同返回类型的方法。 实际上是否可以在Java中覆盖具有不同返回类型的方法? 因为我在网上做了一些搜索,我发现人们说要覆盖一个方法,返回类型也应该是相同的。 根据该书,它还说当我们尝试使用相同的方法名称和参数但不同的返回类型重载方法时,java将抛出编译错误,因为签名仅表示方法名称和参数。 如果这是真的,我们应该能够覆盖具有不同返回类型的方法。 请帮我理解这个。 提前致谢。

理解Java中抽象类的目的

假设我有两个类,A和B.A类被定义为抽象,而B扩展了这个抽象类,最后我测试了结果,两个类都是同一个包的一部分。 public abstract class A { protected abstract void method1(); protected void method2() { System.out.println(“This is Class A’s method”); } } public class B extends A { @Override protected void method1() { System.out.println(“This is B’s implementaiton of A’s method”); } } 现在当我测试它们时: B b = new B(); b.method1(); b.method2(); 我得到预期的输出: This is B’s implementaiton of […]

类不是抽象的,并且不会覆盖Java中的错误

我在Java中遇到编译时错误: MyClass is not abstract and does not override abstract method onClassicControllerRemovedEvent( wiiusej.wiiusejevents.wiiuseapievents.ClassicControllerRemovedEvent) in wiiusejevents.utils.WiimoteListener) 这是class级: import wiiusej.WiiUseApiManager; import wiiusej.Wiimote; import wiiusej.wiiusejevents.physicalevents.ExpansionEvent; import wiiusej.wiiusejevents.physicalevents.IREvent; import wiiusej.wiiusejevents.physicalevents.MotionSensingEvent; import wiiusej.wiiusejevents.physicalevents.WiimoteButtonsEvent; import wiiusej.wiiusejevents.utils.WiimoteListener; import wiiusej.wiiusejevents.wiiuseapievents.DisconnectionEvent; import wiiusej.wiiusejevents.wiiuseapievents.NunchukInsertedEvent; import wiiusej.wiiusejevents.wiiuseapievents.NunchukRemovedEvent; import wiiusej.wiiusejevents.wiiuseapievents.StatusEvent; public class MyClass implements WiimoteListener{ public void onButtonsEvent(WiimoteButtonsEvent arg0) { System.out.println(arg0); if (arg0.isButtonAPressed()){ WiiUseApiManager.shutdown(); } } public […]

Java重载和覆盖

我们总是说方法重载是静态多态,而重写是运行时多态。 静态到底是什么意思? 在编译代码时是否解析了对方法的调用? 那么普通方法调用和调用最终方法之间的区别是什么呢? 哪一个在编译时链接?

关于覆盖变量的地方有轻微的混淆

我正在为SCJP做准备(最近由甲骨文重新命名为OCPJP),我在模拟考试中遇到的一个特殊问题让我感到困惑,答案描述并没有解释清楚的事情。 这是一个问题: class A { int x = 5; } class B extends A { int x = 6; } public class CovariantTest { public A getObject() { return new A(); } public static void main(String[]args) { CovariantTest c1 = new SubCovariantTest(); System.out.println(c1.getObject().x); } } class SubCovariantTest extends CovariantTest { public B getObject() { return […]

Java中’System.out.println()’和’toString()’之间的连接

Java中System.out.println()和toString()之间的连接是什么? 例如: public class A { String x = “abc”; public String toString() { return x; } } public class ADemo { public static void main(String[] args) { A obj = new A(); System.out.println(obj); } } 如果主类运行,则输出为”abc” 。 当我删除覆盖toString()的代码时,它输出为”A@659e0bfd” 。 那么,当我使用参数作为对象时,是否可以解释System.out.println()的工作原理是什么? 是否与toString()方法完全连接?