A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 白驹过隙11 初级黑马   /  2019-3-2 19:02  /  1556 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hmhm123 于 2019-3-24 10:30 编辑

[Java] 纯文本查看 复制代码
class Person {
        String name="P";
        public Person() {
        }
        
        public String getName() {
                return name;
        }
} 

class Student extends Person {
        String name="S";
        
        public Student() {}
}

class Test {
        public static void main(String[] args) {
                Student s1 = new Student();        
                System.out.println(s1.getName());
        }
}

打出来的是P 为什么
根据就近原则不应该是S吗

3 个回复

倒序浏览
没错
子父类成员变量同名
    遵循就近原则
    先去当前局部位置找 有定义就调用
    再去本类中成员位置找 有定义就调用
    再去父类中的成员位置找 有定义就调用
    找不到就报错

getName()方法是从父类Person类中继承过来的,实际上Student本类中并没有;实际调用的时候是去父类中找该方法;那在父类的getName()方法中调用name属性的时候,自然是P离它最近了;
回复 使用道具 举报
本帖最后由 hmhm123 于 2019-3-24 10:31 编辑
hmhm123 发表于 2019-3-2 23:52
没错
子父类成员变量同名
    遵循就近原则

麻烦再帮我看看这个,为什么这个调用的是子类的show2();

[Java] 纯文本查看 复制代码
class Person {
        
        public Person() {
        }
        
        public void show(){
                show2();
        }
                
        public void show2(){
                System.out.println("P");
        }
} 

class Student extends Person {
                
        public Student() {}
        
        public void show2(){
                System.out.println("S");
        }
}

class Test2{
        public static void main(String[] args) {
                Student s = new Student();                
                s.show();
        }
}
回复 使用道具 举报
白驹过隙11 发表于 2019-3-3 12:49
麻烦再帮我看看这个,为什么这个调用的是子类的show2();

class Person {

继承中子父类成员方法的特点
    优先查找子类有没有对应的方法,没有再执行父类相应的方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马