fly741852 2009-03-07 22:19
浏览 214
已采纳

java继承问题

class A {
public void getMessage() {
showMessage();
}

private void showMessage() {
System.out.println("A");
}
}

public class B extends A {

private void showMessage() {
System.out.println("B");
}

public static void main(String[] args) {
A a = new B();
B b = new B();
a.getMessage();
b.getMessage();

}

}

为什么输出都是A
问题补充
这个我知道
B b = new B();
b.getMessage();
为什么调用的是父类的私有方法

A a = new B();
a.getMessage();
为什么调用的是父类的私有方法

  • 写回答

7条回答

  • Novato_IT 2009-03-07 22:19
    关注

    [quote]继承思想中的向上转型,参考Thinking in java...[/quote]
    [code="java"]public class PrivateOverride {

    private void f(){
    System.out.println ("private f()");
    }
    public static void main (String[] args) {
    //把main方法看成特许的类方法,可以直接调用私有方法
    PrivateOverride hh=new PrivateOverride();
    hh.f(); //private f()
    //向上转型,先构造基类原子,正好可以在main方法中调用,如果将PrivateOverride方法访问权限改为public就可以实现多态啦
    PrivateOverride jj=new Derived();
    jj.f(); //private f()
    }

    }

    class Derived extends PrivateOverride{
    public void f(){
    System.out.println ("public f()");
    }
    }[/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?