被 Java 的继承绕晕

2020-04-16 18:11:54 +08:00
 Liyiw
class Person {
    int a = 100;

    public int getA() {
        return a;
    }
}

class Man extends Person {
    int a = 0;

    public int getA() {
        return a;
    }
}

class Demo {
    public static void main(String[] args) {
        Person person = new Man();
        System.out.println(person.a); // 100
        System.out.println(person.getA()); // 0
    }
}

v 友可以提供一下什么关键词可以 google 吗

1967 次点击
所在节点    问与答
12 条回复
crella
2020-04-16 18:27:38 +08:00
为什么是 Person person = new Man();而不是 Man person = new Man();呢
不懂帮问
Liyiw
2020-04-16 18:29:17 +08:00
@crella 试卷题目,我也想知道这个是什么机制
0DBBFF
2020-04-16 18:31:02 +08:00
多态啊
mrmre
2020-04-16 18:51:41 +08:00
向上转型,动态绑定
aureole999
2020-04-16 18:58:45 +08:00
你问的是 a 属性为什么不一样吗?
这叫 Hiding Fields 。实际应用中不推荐
liujan
2020-04-16 19:19:20 +08:00
java 属性多态。 访问变量看声明,访问方法看实际对象类型
charlie21
2020-04-16 19:53:23 +08:00
直接模仿范例的写法,不要瞎写,搞明白茴字四种写法也没用
zxCoder
2020-04-16 20:05:21 +08:00
java 要是哪个版本能把这些写法禁掉就好了,考试就不会出这些题目了
TuringGunner
2020-04-16 20:11:35 +08:00
这就是常规的多态吧
zhuawadao
2020-04-16 20:13:52 +08:00
关键字"符号引用","直接引用","静态分派","动态分派"
yjxjn
2020-04-16 20:14:00 +08:00
你问的意思是不是为啥 person.a 打印出来是 100,而 person.getA 打印出来是 0 ?
(那就按照我对问题的理解来回答这个问题了。。。下回记得给问题啊,甩篇代码谁知道你问的啥)
这个是写的 Java 三大特性之一,多态,向上转型。这里有多态的内容
https://www.runoob.com/java/java-polymorphism.html
yjxjn
2020-04-16 20:14:38 +08:00
@charlie21 说实在,我是从来没这么写过,因为这么写容易挨打,CR 的时候也会被说~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/663173

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX