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
相关文章
|
1月前
|
Java 程序员
Java 异常处理与正则表达式详解,实例演练及最佳实践
在 Java 代码执行期间,可能会发生各种错误,包括程序员编码错误、用户输入错误以及其他不可预料的状况。 当错误发生时,Java 通常会停止并生成错误消息,这个过程称为抛出异常。 try...catch 语句 try 语句允许您定义一段代码块,并在其中测试是否发生错误。 catch 语句允许您定义一段代码块,当 try 块中发生错误时执行该代码块。 try 和 catch 关键字成对使用,语法如下:
42 0
|
1月前
|
存储 Java
Java 编程实例:相加数字、计算单词数、字符串反转、元素求和、矩形面积及奇偶判断
Java中相加两个数字可通过简单赋值实现,如`int sum = x + y;`。若要用户输入数字相加,可使用`Scanner`类读取。计算单词数,可使用`split()`方法或`StringTokenizer`类。反转字符串,可用`for`循环或`StringBuilder`的`reverse()`方法。计算数组元素总和,可遍历数组累加。矩形面积通过长度乘以宽度得出。判断奇偶性,利用模2运算或位运算检查最低位。更多内容,可关注微信公众号`Let us Coding`。
49 0
|
28天前
|
Java
java面向对象高级分层实例_实体类
java面向对象高级分层实例_实体类
10 1
|
7天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
10 0
|
28天前
|
Java
java面向对象高级分层实例_测试类(main方法所在的类)
java面向对象高级分层实例_测试类(main方法所在的类)
9 1
|
28天前
|
Java 数据库
java面向对象高级分层实例_数据库操作类
java面向对象高级分层实例_数据库操作类
10 1
|
28天前
|
Java
java面向对象高级分层实例_BaseDao
java面向对象高级分层实例_BaseDao
12 1
|
1月前
|
Java
Java类的定义与对象使用实例
Java类的定义与对象使用实例
16 3
|
1月前
|
Java API
java查询属性个数
【2月更文挑战第11天】
|
2月前
|
数据采集 Java 数据库
我想再学一次Java三种循环结构哦---【开发实例】
我想再学一次Java三种循环结构哦---【开发实例】
32 0
我想再学一次Java三种循环结构哦---【开发实例】