public class two extends A{
int fun2() {
        return 456;
}

public static void main(String[] args) {
  two b = new two();
          b.fun1();
          A a = b;
          a.fun1(); }}
class A {
    void fun1() {
          System.out.println(fun2());
    }    int fun2() {
            return 123;
    }
}

解决方案 »

  1.   

    结果是:
    456
    456因为多态的原因,fun2()每次执行的都是子类的fun2(). 
      

  2.   

    赞同1L,再补充一点:A a = b;是引用赋值,实际上相当于a和b这两个引用,指向同一个对象two。
      

  3.   

    都是456, 都是调用的class two 的fun2方法, 因为实例都是class two的实例b.fun1() 这是继承了A的方法,就相当于在class two 里面这么写
    public class two extends A{
        int fun2() {
            return 456;
        }
       int fun1() {
        System.out.println(fun2());
      } 
     所以会打印出456第二个,虽然这个变量声明的A 类,但是指向的却是two 类, 所以也会打印出456。 需要注意的是 a 只可以执行 two 从 A 里继承的方法,而不能执行two自己定义的方法
      

  4.   

    a指向的是一个two对象。如果改为A a = new A(),那么a.fun1()输出结果就是123了