public class A {
    public int m = 1;
    public void view() {
        System.out.println(this.m);
    }
}
class B extends A {
    public int m = 2;
    public static void main(String[] args) {
        B b = new B();
        System.out.println(b);
        b.view();
    }
}
输出
test.B@6ca6fed5
1

解决方案 »

  1.   

    两个m并没有什么关联,一个是A类的m,一个是B的m,相当于与两个变量,没有继承的关系,所以组以后输出的是A的b
      

  2.   

    因为你的B没有重写view,调用的还是A的view
      

  3.   

    public class Demo3 extends A {
    public int m = 2;
        public static void main(String[] args) {
         Demo3 b = new Demo3();
         A a =new A();
         System.out.println(b.m);//2
         System.out.println(a.m);//1
         b.view();//1
        
        }
    }class A {
        public  int m = 1;
        public void view() {
            System.out.println(m);
        }
    }
      

  4.   

    父类中this不是指向实例对象B的引用,this.m 应该是B的m
      

  5.   

    主要不理解的是父类中this确实shi指向B实例,this.m 怎么变成A的m
      

  6.   

    谁告诉你的?this在A的方法里面,当然指A
      

  7.   

    this可以指向自身的和从父类继承的,无法指向子类的
      

  8.   

    因为b类中只是说继承中含有view()方法,当b.view()调用时会虚拟机会转到A类中,而当前的this.m当然就是A中的了。
    要调用当前类对象中的m,覆写view就可以了。建议使用调试工具
      

  9.   

    嗯,
    属性确实是没有多态,两个是指向同样的,this不是应该指向子类的m
      

  10.   

    this表示当前类的成员变量