首页 > 学院 > 开发设计 > 正文

Java中引用,造型等问题解析

2019-11-18 13:23:52
字体:
来源:转载
供稿:网友

  作者:chris译
  
   或许大家java的多态问题,对上溯,下溯造型有了一定的概念,对PRotected和private大家想必也很清楚,但是,这几个个结合在一起,往往令人产生很多困惑,在这里,我举一个例子,大家或许会发觉这篇文章对你来说还是很有意义的:
  

  例子一共有两个class. 可能出现困惑的地方我都会在后面一一解释.A是父类,B继续A,并且实现了protectedTest(Object obj)方法.如下面所示:
  


  

B.java的源代码:


  

package cn.org.matrix.test;

   import cn.org.matrix.test.A;

   /**

   * <p>Title: protect, private and upcasting </p>

   * <p>Description: email:chris@matrix.org.cn</p>

   * <p>Copyright: Matrix Copyright (c) 2003</p>

   * <p>Company: Matrix.org.cn</p>

   * @author chris

   * @version 1.0,who use this example pls remain the declare

   */

   public class B extends A

   {

   protected int protectedb = 0;

   protected int protectedab = 0;

  


  

protected void protectedTest(Object obj)

   {

   System.out.println("in B.protectedTest(Object):" + obj);

   }

   }

  


  



   A.java的源代码:


  

package cn.org.matrix.test;

   import cn.org.matrix.test.B;

   /**

   * <p>Title: protect, private and upcasting </p>

   * <p>Description: email:chris@matrix.org.cn</p>

   * <p>Copyright: Matrix Copyright (c) 2003</p>

   * <p>Company: Matrix.org.cn</p>

   * @author chris

   * @version 1.0,who use this example pls remain the declare

   */


  

public class A

   {

   protected int protecteda = 0;

   protected int protectedab = 0;

   private void privateTest()

   {

   System.out.println("in A.privateTest()");

   }

   protected void protectedTest(Object obj)

   {

   System.out.println("in A.protectedTest(Object):" + obj );

   }

  

   protected void protectedTest( String str )

   {

   System.out.println("in A.protectedTest(String):" + str);

   }

  

   public static void main (String[] args)

   {

   // Test A

   A a1 = new A();

   a1.privateTest();

   // Test B

   String helloStr = "Hello";

   Object helloObj = helloStr;

   B b1 = new B();

   A a2 = b1; // 这里发生了什么?困惑1

   b1=a1; //编译错误,困惑2

   b1. privateTest(); //编译错误,困惑3

   b1.protectedTest(helloObj); //输出结果?困惑4

   b1.protectedTest(helloStr); //编译错误,困惑5

   a2.protectedTest(helloObj); //输出结果? 困惑6

   a2.protectedTest(helloStr); //输出结果?困惑7 ?

   }

   }

  


  



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表