日期:2014-05-20  浏览次数:20858 次

子类向上转型后如何调用父类方法
Java code

public class Wangwang extends Dog {
    int age = 50;
    public void say() {
        System.out.print("I'm the children");
    }
    public static void main(String[] args) {
        Dog a =new Wangwang();
                a.say();
    }
}

class Dog  {
    public void say() {
        System.out.println(" I'm the father!");
    }
}

显然,输出"I'm the children"
向上转型后 实例不能访问子类特有的属性与方法,但这个“父类”调用自己的方法时,调用到的却还是子类overrided的.
问1:有什么方法能让向上转型后的类调用没被重写过的方法?//即在不修改类的构造情况 下使输出 为" I'm the father!"
问2:重写到底是什么一回事,是在父类方法对应的 内存上写入新内容,还是在另一块新内存上写入新方法,即父类方法还在吗?

------解决方案--------------------
探讨
楼主想多了:

一般来说,如果不希望子类重写父类的方法,将他声明为final即可。
显然 a.say(),要么是父类的方法,要么是被覆盖的子类的方法,如果你需要的是父类的行为,应该调用父类对象的实例。如果你希望子类有父类一样的行为,就不应该覆盖此方法。