在Java中,子类可以覆盖父类的属性吗?
在Java中,子类可以覆盖父类的属性,这也是面向对象编程中的一种多态性表现。
当子类定义了与父类同名的属性时,子类的属性会覆盖父类的属性。此时,子类访问这个属性时,实际上访问的是子类的属性,而不是父类的属性。
例如:
class Animal { public String name = "动物"; public void eat() { System.out.println("动物在进食");}}class Dog extends Animal { public String name = "狗"; public void eat() { System.out.println("狗在啃骨头");} public void bark() { System.out.println("汪汪汪");}}public class Test { public static void main(String[] args) { Animal animal = new Dog();System.out.println(animal.name); animal.eat(); }}
在这个示例中,Animal类中定义了一个name属性和一个eat()方法。Dog类继承了Animal类并定义了一个同名的name属性和一个eat()方法,以及一个新的bark()方法。在main()方法中,创建一个Dog对象并赋值给一个Animal类型的变量,然后分别调用这个对象的name属性和eat()方法。
由于Dog类覆盖了Animal类的name属性和eat()方法,因此在执行animal.name和animal.eat()时,实际上访问的是Dog类的属性和方法,输出结果为:
动物狗在啃骨头
需要注意的是,虽然子类可以覆盖父类的属性,但是如果子类的属性与父类的属性的类型不一致,那么在子类中定义的新属性并不能完全替代父类的属性,而是在子类中新增了一个同名的属性。此时,子类和父类的属性并不是同一个属性,需要通过特定的方式来访问它们。
网友评论