黑马程序员技术交流社区

标题: 新人请教继承的问题 [打印本页]

作者: 白驹过隙11    时间: 2019-3-2 19:02
标题: 新人请教继承的问题
本帖最后由 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吗
作者: hmhm123    时间: 2019-3-2 23:52
没错
子父类成员变量同名
    遵循就近原则
    先去当前局部位置找 有定义就调用
    再去本类中成员位置找 有定义就调用
    再去父类中的成员位置找 有定义就调用
    找不到就报错

getName()方法是从父类Person类中继承过来的,实际上Student本类中并没有;实际调用的时候是去父类中找该方法;那在父类的getName()方法中调用name属性的时候,自然是P离它最近了;
作者: 白驹过隙11    时间: 2019-3-3 12:49
本帖最后由 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();
        }
}

作者: hmhm123    时间: 2019-3-3 14:39
白驹过隙11 发表于 2019-3-3 12:49
麻烦再帮我看看这个,为什么这个调用的是子类的show2();

class Person {

继承中子父类成员方法的特点
    优先查找子类有没有对应的方法,没有再执行父类相应的方法





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2