A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马林康 中级黑马   /  2012-6-21 17:57  /  1611 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马林康 于 2012-6-22 11:53 编辑

1.
  1. class A {
  2.    public int i = 10;
  3. }

  4. class B extends A{
  5.    public int i = 20;
  6. }

  7. public class TestPolm{
  8.    public static void main(String args[]){
  9.       B b = new B();
  10.       A a = b;
  11.       
  12.       System.out.println(b.i);
  13.       System.out.println(a.i);
  14.    }
  15. }
复制代码
2
  1. class A {
  2.    private int i = 10;
  3.    
  4.    public void printI(){
  5.            System.out.println(i);
  6.    }
  7. }

  8. class B extends A{
  9.    private int i = 20;
  10. }

  11. public class TestPolm{
  12.    public static void main(String args[]){
  13.       B b = new B();
  14.       A a = b;
  15.       
  16.       b.printI();
  17.       a.printI();
  18.    }
  19. }
复制代码
3
  1. class A {
  2.    private int i = 10;
  3.    
  4.    public void printI(){
  5.            System.out.println(i);
  6.    }
  7. }

  8. class B extends A{
  9.    private int i = 20;
  10.    
  11.    public void printI(){
  12.            System.out.println(i);
  13.    }
  14. }

  15. public class TestPolm{
  16.    public static void main(String args[]){
  17.       B b = new B();
  18.       A a = b;
  19.       
  20.       b.printI();
  21.       a.printI();
  22.    }
  23. }
复制代码
我要的不是运行结果 ,我要的是解释

6 个回复

正序浏览
本帖最后由 孙浩 于 2012-6-21 23:54 编辑

在多态中,成员变量的特点:无论编译和运行都参考左边(引用型变量所属的类)

在多态中,成员函数的特点:编译看左边,运行参考右边
                 静态成员函数的特点:无论编译和运行都参考左边
1.
class A {

   public int i = 10;

}

class B extends A{

   public int i = 20;

}

public class TestPolm{

   public static void main(String args[]){

      B b = new B();

      A a = b;//多态,声明父类创建子类。

      

      System.out.println(b.i);

      System.out.println(a.i);//在多态中,成员变量的特点:无论编译和运行都参考左边(引用型变量所属的类)    所以 a.i = 10


   }

}
2.3.参考:
在多态中,成员变量的特点:无论编译和运行都参考左边(引用型变量所属的类)

在多态中,成员函数的特点:编译看左边,运行参考右边
                 静态成员函数的特点:无论编译和运行都参考左边

回复 使用道具 举报
不好意思第一个原因没有复制上:System.out.println(b.i);//20 原因成员变量不能被继承;谁的引用就能调用谁的成员变量;
一句话这几段代码主要 考的是this关键字的应用;
回复 使用道具 举报
class A {

   public int i = 10;

}

class B extends A{

   public int i = 20;

}

public class TestPolm{

   public static void main(String args[]){

      B b = new B();

      A a = b;

      

      System.out.println(b.i);

      System.out.println(a.i);

   }

}

-----------------------------------------------------------------------------------------
class A {

   private int i = 10;

   

   public void printI(){

           System.out.println(i);

   }

}

class B extends A{

   private int i = 20;

}

public class TestPolm{

   public static void main(String args[]){

      B b = new B();

      A a = b;

      

      b.printI();//10 原因:System.out.println(i);等同于System.out.println(this.i);
      a.printI();//10 this是隐式的。在毕老师的this关键有讲,如果你不写JVM会帮你加上的;

   }

}
------------------------------------------------------------------------------------------------------------------------------
class A {
  private int i=10;
   //public int i = 10;

   

   public void printI(){

           System.out.println(i);

   }

}

class B extends A{

    public int i = 20;
   //private int i=20;

   

   public void printI(){

           System.out.println(i);

   }

}

public class TestPolm{

   public static void main(String args[]){

      B b = new B();

      A a = b;

      

      b.printI();//20 原因;System.out.println(i)等同于System.out.println(this.i)

      a.printI();//20 注意成员变量不能被覆盖;你可以把int i改成public 验证:
    //然后把B类的输出语句改成;System.out.println(super.i)表示打印父类的成员变量的
    //值;当然父类和子类成员改变不同的时候就没有这个必要直接写变量名就是了;

   

   }

}
回复 使用道具 举报
子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量
在Java中重写指的是方法的重写,而不是属性的重写;
希望能帮上你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马