V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
rabbbit
V2EX  ›  问与答

(小白问题) Java 关于 this 的指向问题

  •  
  •   rabbbit · 2020-10-12 21:16:03 +08:00 · 1376 次点击
    这是一个创建于 1484 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个 this 到底指向谁, 为什么 s.getName() 输出 foo, 而 s.name 输出 bar.
    我以为两个都结果都应该是 bar,是哪里搞错了?

    class Person {
        public String name = "foo";
        public String getName() {
            return this.name;
        }
    }
    
    class Student extends Person {
        public String name = "bar";
    }
    
    public class Hello {
        public static void main(String[] args) {
            Student s = new Student();
            System.out.println(s.getName()); // foo 
            System.out.println(s.name); // bar
        }
    }
    
    
    4 条回复    2020-10-13 14:02:03 +08:00
    yumenawei
        1
    yumenawei  
       2020-10-12 21:49:57 +08:00   ❤️ 1
    帮顶~
    billlee
        2
    billlee  
       2020-10-12 21:54:16 +08:00   ❤️ 1
    字段没有多态性,this.name 取的是编译期 this 变量所属类的 name, 对于 Person::getName 来说,this 是 Person, this.name 是 "foo".
    对于 main 中的 s.name 来说,s 是 Student, s.name 是 "bar".
    oneisall8955
        3
    oneisall8955  
       2020-10-12 23:32:21 +08:00 via Android   ❤️ 1
    多态针对接口(行为,方法),属性没有多态
    dushe
        4
    dushe  
       2020-10-13 14:02:03 +08:00
    this 指向最近的对象
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3178 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:27 · PVG 20:27 · LAX 04:27 · JFK 07:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.