java - 在子类中使用父类的方法时,改变方法中调用的字段/field
大家讲道理
大家讲道理 2017-04-18 10:30:23
0
2
639

大家好,我在工作遇到这样的问题, 之前我有父类Home和子类SmallHome,子类SmallHome原本希望使用继承于父类的printHome方法,同时因为子类的field name不同于父类,所以希望printHome方法可以调用子类中重新定义的name,也就是让子类的对象调用printHome方法时,可以打印出"little sweet home"。

为了实现这一目标,第一版写成了如下代码,把父类中的printHome方法复制粘贴进了子类加以Override,以确保子类对象使用printHome方法时,使用的name来自于子类,而不是父类。我感觉这样写很不好,因为在我的实际工作中,printHome方法会很长,这样子做不太符合代码复用的风格。

package com.test;

public class Home {
    protected String name = "sweet home";
    
    public void printName() {
        System.out.println(name());
    }
}
package com.test;

public class SmallHome extends Home {
    protected String name = "little sweet home";

    @Override
    public void printName() {
        System.out.println(name);
    }
}

在stackoverflow里请教后,代码可以做如下修改,也就是改用方法去定义printHome中所需要的那个值。

package com.test;

public class Home {
    protected String name() { return "sweet home";}
    
    public void printName() {
        System.out.println(name());
    }
}
package com.test;

public class SmallHome extends Home {
    @Override
    protected String name() { return "little sweet home";}
}

自此虽然问题有了这么个解决方法,但是我还是不大明白,在修改后的代码里,子类对象调用printHome方法时,调用的name()方法,为什么是子类中Override后的name()? 请了解的同学帮忙解释下,谢谢!

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

모든 응답(2)
伊谢尔伦

다형성은 런타임 시 객체 유형에 따라 호출해야 하는 메서드를 찾습니다.

左手右手慢动作

부모 클래스의 메서드를 재정의했습니다. 설명할 게 없는 것 같아요.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿