Tag: 重写

在使用generics(Java)的扩展接口中覆盖方法契约?

我试图覆盖扩展另一个接口的接口中的方法声明。 这两个接口都使用generics。 根据Java教程,这应该是可能的,但该示例不使用generics。 当我尝试实现它时,编译器显示以下错误(我已经替换了名称,因为某些代码不是我自己的。): InterfaceExtended中的myMethod(T)与Interface中的myMethod(T)冲突; 两种方法都有相同的擦除,但都不会覆盖另一种方法。 代码如下所示: public interface Interface { public void myMethod(T x); } public interface ExtendedInterface extends Interface { public void myMethod(T x); } 如果有人建议如何改变它以使其可接受,或解释这是导致问题的原因,我将非常感激。 谢谢! badPanda

Prettyfaces:在观察特定的url模式时,将bean属性设置为某个常量值

在pretty-config.xml编写Prettyfaces的URL映射规则时,我想添加一条规则,即只要在URL中观察到特定模式,就会为bean属性设置一个特定的常量值。 例如,当存在像../products/electronics这样的模式时,它应该将bean属性bean.category设置为ELECTRONICS_ITEMS 。 我怎么做 ?

使用java中的upcasting调用“覆盖”私有方法

public class PrivateOverride { private void f() { System.out.println(“PrivateOverride f()”); } public static void main(String[] args) { PrivateOverride po = new DerivedWithOutD(); po.d();// PrivateOverride f() PrivateOverride poD = new DerivedWithD(); poD.d();//Derived f() } public void d() { f(); } } class DerivedWithOutD extends PrivateOverride { public void f() { System.out.println(“Derived f()”); } } class DerivedWithD […]

调用超类方法而不是子类方法

我们来看看这段代码: public class ParentClass { public void foo(Object o) { System.out.println(“Parent”); } } public class SubClass extends ParentClass { public void foo(String s) { System.out.println(“Child”); } public static void main(String args[]) { ParentClass p = new SubClass(); p.foo(“hello”); } } 我希望这打印出“Child”,但结果是“Parent”。 为什么java会调用超类,我该怎么做才能让它调用子类中的方法?

Java多态性

出于好奇,这是一个问题。 我知道当我们通过引用它的超类来调用子类对象的重写方法时,JVM重视对象的类型而不是引用的类型。 这是我的简单代码: class Animal { void eat() { System.out.println(“Animal is eating…”); } } class Horse extends Animal { @Override void eat() { System.out.println(“Horse is eating…”); } } public class PolymorphismTest { public static void main(String…args) { Animal a=new Animal(); a.eat(); Animal h= new Horse(); h.eat(); } } 正如所料,我得到了输出: run: Animal is eating… Horse is […]

构造函数中的多态方法(Java)

A类在构造函数中调用公共方法f() 。 B类用自己的实现覆盖方法f() 。 假设您实例化对象B ..对象B方法f()将在对象A的构造函数中调用,尽管对象B未完全初始化。 谁能解释这种行为? 编辑:是的,它不推荐练习..但我不明白为什么 Java没有调用基类A的f()实现而不是“伸出”到派生类B的f()实现。 码: class A { A() { System.out.println(“A: constructor”); f(); } public void f() { System.out.println(“A: f()”); } } class B extends A { int x = 10; B() { System.out.println(“B: constructor”); } @Override public void f() { System.out.println(“B: f()”); this.x++; System.out.println(“B: x = ” + x); […]

重载是编译时多态。 真?

我知道覆盖和重载之间的语法差异。 我也知道覆盖是运行时多态,重载是编译时多态。 但我的问题是:“重载是否真的是编译时多态?方法调用是否真的在编译时求解?”。 为了澄清我的观点,让我们考虑一个示例类。 public class Greeter { public void greetMe() { System.out.println(“Hello”); } public void greetMe(String name) { System.out.println(“Hello ” + name); } public void wishLuck() { System.out.println(“Good Luck”); } } 由于所有方法greetMe(), greetMe(String name), wishLuck()都是公共的,它们都可以被覆盖(包括重载的),对吧? 例如, public class FancyGreeter extends Greeter { public void greetMe() { System.out.println(“***********”); System.out.println(“* Hello *”); System.out.println(“***********”); } } 现在,请考虑以下代码段: […]

与实例变量的多态性

这是我写的三个类: public class Shape { public int x = 0; public void getArea() { System.out.println(“I don’t know my area!”); } public String toString() { return “I am a shape!”; } public int getX() { return x; } } public class Rectangle extends Shape { public int x = 1; public int getX() { return x; […]