Java中有两个概念:覆盖(Override)和遮盖(Hiding)。这两个概念经常被混淆,但它们实际上有着不同的含义。
覆盖是指子类重新定义了父类的方法,但保持了相同的签名。例如:
class A { public void foo() { System.out.println("A's foo"); } } class B extends A { public void foo() { System.out.println("B's foo"); } }
在这个例子中,B覆盖了A的foo方法。当调用一个B对象的foo方法时,将输出“B's foo”,而不是“A's foo”。注意,覆盖只适用于非私有方法。
遮盖是指子类定义了一个和父类相同名称的变量,这将会隐藏父类的变量。例如:
class A { public int x = 5; } class B extends A { public int x = 10; }
在这个例子中,B遮盖了A的x变量。当访问一个B对象的x变量时,将返回10,而不是原本的5。注意,遮盖适用于变量、静态方法和非静态方法。