Java实例属性覆写问题

简介: Java实例属性覆写问题

先看一段Python代码

实现效果是子类和父类共用一个 sayHello() 方法,通过覆写属性name 输出不同的属性

class Parent():
    name = "parent"
    def getName(self):
        return self.name
    def sayHello(self):
        print(self.name, "-", self.getName())
class Child(Parent):
    name = "child"
if __name__ == "__main__":
    parent = Parent()
    print(parent.getName())
    parent.sayHello()
    child = Child()
    print(child.getName())
    child.sayHello()

输出效果满足预期要求

parent
parent - parent
child
child - child

再来看Java代码

class Parent {
    private String name = "parent";
    public String getName() {
        return name;
    }
    public void sayHello() {
        System.out.println(name + " - " + getName());
    }
}
class Child extends Parent {
    private String name = "child";
}
public class Demo {
    public static void main(String[] args) {
        Parent parent = new Parent();
        System.out.println(parent.getName());
        parent.sayHello();
        Child child = new Child();
        System.out.println(child.getName());
        child.sayHello();
    }
}

输出结果和预期不一样

parent
parent - parent
parent
parent - parent

修改一下子类,覆写父类的getName()方法

class Parent {
    private String name = "parent";
    public String getName() {
        return name;
    }
    public void sayHello() {
        System.out.println(name + " - " + getName());
    }
}
class Child extends Parent {
    private String name = "child";
    // 增加方法覆写
    @Override
    public String getName() {
        return name;
    }
}
public class Demo {
    public static void main(String[] args) {
        Parent parent = new Parent();
        System.out.println(parent.getName());
        parent.sayHello();
        Child child = new Child();
        System.out.println(child.getName());
        child.sayHello();
    }
}

输出结果看到,通过覆写方法获取属性的方式可以获取子类属性,直接获取的属性还是父类中的属性

parent
parent - parent
child
parent - child
相关文章
|
2月前
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
139 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
10天前
|
JSON 前端开发 JavaScript
Java属性为什么不能是is开头的boolean
在Java实体类中,阿里规约要求boolean属性不应以is开头。文章通过实际案例分析了isUpdate字段在JSON序列化过程中变为update的问题,并提供了自定义get方法或使用@JSONField注解两种解决方案,建议遵循规约避免此类问题。
Java属性为什么不能是is开头的boolean
|
2月前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
2月前
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
33 2
|
2月前
|
存储 Java 数据安全/隐私保护
Java中的域,什么是域?计算机语言中的域是什么?(有代码实例)
文章解释了Java中域的概念,包括实例域、静态域、常量域和局部域,以及它们的特点和使用场景。
69 2
|
2月前
|
Java
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
本文介绍了Java中this和super关键字的用法,包括在构造方法中使用this来区分参数和成员变量、使用super调用父类构造方法和方法,以及它们在同一个方法中同时使用的场景。
140 0
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
|
2月前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
225 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
3月前
|
存储 Java
Java之静态(static)与实例(instance)
Java之静态(static)与实例(instance)
|
2月前
|
Java
Java 集合存在相同属性,其他元素累加
Java 集合存在相同属性,其他元素累加
33 0
|
2月前
|
Java
java的Random类和Arrays.sort类使用实例
java的Random类和Arrays.sort类使用实例
11 0