`
eimhee
  • 浏览: 2137251 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA里protected属性和方法的完整测试

阅读更多
原文地址:http://www.java2000.net/p10841

先说几个protected的使用原则,后面再看对应的例子。
  1. protected 的属性和方法可以在本包和子类访问
  2. 非同包的子类里面,不能直接使用父类,或者其它包的子类访问
我们看代码,这个是基类
  1. package test.base;
  2. /**
  3.  * 基类,属性和方法都是protected的。
  4.  *
  5.  * @author 赵学庆,Java世纪网(java2000.net)
  6.  *
  7.  */
  8. public class Base {
  9.   protected int testInt;
  10.   public int publicInt;
  11.   protected int getTestInt() {
  12.     return testInt;
  13.   }
  14. }


下面是2个同一个包的测试代码,一个是普通类,1个是子类。
  1. package test.base;
  2. /**
  3.  * 测试相同包的子类。
  4.  *
  5.  * @author 赵学庆,Java世纪网(java2000.net)
  6.  *
  7.  */
  8. public class TestSamePackageSubClass extends Base {
  9.   public void test() {
  10.     Base b = new Base(); // 使用基类
  11.     b.publicInt = 0// 可以访问
  12.     b.testInt = 1// 访问protected的属性成功
  13.     b.getTestInt(); // 访问protected的方法成功
  14.   }
  15.   public void test2() {
  16.     publicInt = 0// 可以访问
  17.     testInt = 2// 子类中可以直接用父类的属性
  18.     getTestInt(); // 子类中可以直接用父类的方法
  19.   }
  20. }

  1. package test.base;
  2. /**
  3.  * 测试相同包的普通类。
  4.  *
  5.  * @author 赵学庆,Java世纪网(java2000.net)
  6.  *
  7.  */
  8. public class TestSamePackageNormal {
  9.   public void test() {
  10.     Base b = new Base(); // 使用基类
  11.     b.publicInt = 0// 可以访问
  12.     b.testInt = 1// 访问protected的属性成功
  13.     b.getTestInt(); // 访问protected的方法成功
  14.   }
  15. }



下面是不同包的普通类和子类测试,一个普通类,2个子类
  1. package test.sub1;
  2. import test.base.Base;
  3. /**
  4.  * 不同包的正常类。
  5.  *
  6.  * @author 赵学庆,Java世纪网(java2000.net)
  7.  *
  8.  */
  9. class TestOtherPackageNormal {
  10.   public void test() {
  11.     Base b = new Base(); // 使用基类
  12.     b.publicInt = 0// 可以访问
  13.     b.testInt = 1// 访问protected的属性-失败
  14.     b.getTestInt(); // 访问protected的方法-失败
  15.   }
  16.   public void test3() {
  17.     TestOtherPackageSubClass b = new TestOtherPackageSubClass();
  18.     b.publicInt = 0// 可以访问
  19.     b.testInt = 3// 直接访问属性-失败
  20.     b.getTestInt(); // 直接访问方法-失败
  21.   }
  22. }
  1. package test.sub1;
  2. import test.base.Base;
  3. import test.sub2.TestOtherPackage2SubClass;
  4. /**
  5.  * 不同包的子类1.
  6.  *
  7.  * @author 赵学庆,Java世纪网(java2000.net)
  8.  *
  9.  */
  10. class TestOtherPackageSubClass extends Base {
  11.   public void test() {
  12.     Base b = new Base(); // 使用基类
  13.     b.publicInt = 0// 可以访问
  14.     b.testInt = 1// 访问protected的属性失败
  15.     b.getTestInt(); // 访问protected的方法失败
  16.   }
  17.   public void test2() {
  18.     publicInt = 0// 可以访问
  19.     testInt = 2// 直接用父类的属性-成功
  20.     getTestInt(); // 直接用父类的方法-成功
  21.   }
  22.   public void test3() {
  23.     // 用另外一个package的子类。
  24.     TestOtherPackageSubClass2 b = new TestOtherPackageSubClass2();
  25.     b.publicInt = 0// 可以访问
  26.     b.testInt = 1// 访问protected的属性-失败
  27.     b.getTestInt(); // 访问protected的方法-失败
  28.   }
  29.   public void test4() {
  30.     // 用另外一个package的子类。
  31.     TestOtherPackage2SubClass b = new TestOtherPackage2SubClass();
  32.     b.publicInt = 0// 可以访问
  33.     b.testInt = 1// 访问protected的属性-失败
  34.     b.getTestInt(); // 访问protected的方法-失败
  35.   }
  36. }
  1. package test.sub1;
  2. import test.base.Base;
  3. /**
  4.  * 不同包的子类2.
  5.  *
  6.  * @author 赵学庆,Java世纪网(java2000.net)
  7.  *
  8.  */
  9. class TestOtherPackageSubClass2 extends Base {
  10. }


另一个不同包的子类
  1. package test.sub2;
  2. import test.base.Base;
  3. /**
  4.  * 另一个不同包的子类。
  5.  *
  6.  * @author 赵学庆,Java世纪网(java2000.net)
  7.  *
  8.  */
  9. public class TestOtherPackage2SubClass extends Base {
  10. }


总结一下:
  1. 公共属性总能访问,呵呵,这个不用说了
  2. 同一包的子类,可以任意使用
  3. 同一个包的正常类,可以直接用他的实例进行访问
  4. 不同包的正常类,无法访问任何属性和方法
  5. 不同包的子类,不能使用父类实例的属性和方法
  6. 不同包的子类,不能使用其它包的子类实例的属性和方法
  7. 不同包的子类,可以直接使用父类的属性和方法
总之,不同包的子类就规规矩矩的在自己的代码里用父类的属性就行了。其它的使用都是不允许的。

分享到:
评论

相关推荐

    Java类的属性与方法PPT教案学习.pptx

    Java 类的属性与方法是面向对象编程的基础...通过理解和掌握这些知识点,开发者能够更好地设计和实现Java类,利用属性和方法来描述现实世界中的对象,以及它们之间的交互。这有助于构建出高效、可维护的Java应用程序。

    java一下测试题目和答案

    这份“Java一下测试题目和答案”资源是针对Java初学者设计的,旨在帮助他们巩固基础知识,提升编程技能。 1. **Java基础知识** - **变量与数据类型**:Java有八种基本数据类型,包括整型(byte, short, int, long...

    Java中extends类的继承

    类的继承是面向对象编程的一个核心特性,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用和扩展。下面将详细探讨`extends`关键字在Java中的使用、特点以及相关知识点。 1. **类的继承...

    Java邮件发送方法,本地测试实例

    本实例将详细讲解如何使用Java实现邮件发送功能,以及如何在本地进行测试。 首先,要发送邮件,我们需要引入相关的JavaMail API库。在Java中,这通常涉及到两个核心的JAR包:`javax.mail.jar` 和 `activation.jar`...

    java测试题java测试题.doc

    本资源主要测试了Java语言的基础知识和编程能力,涵盖了Java的基本概念、面向对象编程、异常处理、线程编程、Java应用程序和Applet程序的开发等方面。 一、填空题 1. Java源文件的扩展名为.java,而Java源程序编译...

    JAVA基础测试

    在Java中,类是对象的模板,它定义了对象的属性(数据成员)和行为(方法)。对象是类的实例,可以看作是类的具体化。Java支持封装、继承和多态三大面向对象特性,这些使得代码更易于维护和扩展。 异常处理是Java中...

    在父类获取子类属性

    这样,子类就拥有了父类的所有非私有(public和protected)成员,包括字段(属性)和方法。但是,子类可能会添加自己的特有属性,这些属性在父类中是不存在的。 **继承的优势:** 1. **代码重用**:子类可以直接...

    java面向对象编程测试题

    8. Java提供了public、private、protected和默认四种访问控制修饰符,用于控制类、方法和变量的访问范围。 六、构造器 9. 构造器是类的一个特殊方法,用于初始化新创建的对象。当创建类的新实例时,会自动调用与之...

    JAVA基础题 测试题

    10. **类体内容**:类体包括变量定义(属性)和方法定义(功能)两部分。 11. **成员变量与局部变量**:成员变量属于类,存储在堆内存中,可被类的所有方法访问;局部变量定义在方法、构造器或块中,仅在其定义的...

    使用java语言实现车的封装和继承

    在Java中,我们通过访问修饰符(如public、private、protected)来控制类的成员(变量和方法)的可见性。例如,我们可以将车的一些关键属性如品牌、颜色和速度定义为私有(private),防止外部直接修改。然后,我们...

    《Java 语言程序设计》阶段测试题

    在Java中,子类可以继承父类的方法和属性,但访问控制符(如`private`、`protected`和`public`)限制了这些方法和属性的可访问性。例如,在试题3中,由于`Base`类的构造函数和属性都使用了`private`修饰符,这导致`...

    (完整word)Java基础测试题.doc

    10. 继承特性:子类能继承父类的非私有(`public`和`protected`)方法和属性,选项B正确。 11. 构造方法:构造方法与类名相同,无返回类型,可以被类的实例化过程调用。如果程序员没有显式定义构造方法,Java会提供...

    JavaOOP内部测试机试题2.doc

    JavaOOP内部测试机试题2.doc 本资源主要关注Java面向...本资源提供了一个完整的Java面向对象编程项目,涵盖了封装、继承、多态、集合框架和接口等关键知识点,对于初学者学习Java语言和面向对象编程思想非常有帮助。

    java的Servlet测试demo

    总结,这个"java的Servlet测试demo"涵盖了Servlet的基本概念、生命周期、在IDEA中的配置和测试方法,以及GET和POST请求的处理。通过这个示例,你可以进一步学习和实践如何使用Servlet构建动态Web应用。在实际开发中...

    JAVA第三、四章测试1

    在Java中,类的属性和方法可以通过访问修饰符来控制其可见性,如public、private、protected以及默认(包访问)。例如,选项B提到封装体中的属性和方法的访问权限是相同的,这是错误的,因为不同的成员可以有不同的...

    Java基础测试题.doc

    10. 继承:子类可以继承父类的非私有方法和属性。 11. 构造方法:构造方法的方法名必须与类名相同,构造方法可以被程序调用,若编程人员没再类中定义构造方法,程序将提供默认的无参数构造方法。 12. 方法重载:...

    Java测试题4答案

    《Java测试题4》 <br>Java练习题 一、填空 1、 对象的状态和行为是对象的主要属性;前者对应类的 ,行为又称为对象的操作,对应着类的 。类的定义包括 声明和 声明。 2、 要嵌入在HTML文件中运行的程序...

    JAVA学习计划和方法

    本文将围绕JAVA基础知识展开讨论,并重点解析`path`与`CLASSPATH`的区别及其设置方法,深入探讨`package`和`import`的使用规则,以及访问修饰符的正确运用和如何创建`jar`文件等核心知识点。 #### 二、PATH与...

    java上机测试题java上机测试题.doc

    13. **访问修饰符**:Java的访问修饰符有public、private、protected和默认,用于控制类、方法和字段的访问范围。 14. **继承与封装**:继承允许一个类(子类)继承另一个类(父类)的特性,封装是将数据和操作数据...

    JAVA第一单元动物乐园

    3. **封装**:在Java中,封装是通过访问修饰符(public、private、protected)实现的,它限制了数据和方法的访问权限。在动物乐园项目中,动物的某些属性(如年龄)可能只允许内部修改,而其他属性(如名字)可能...

Global site tag (gtag.js) - Google Analytics