java中protect属性用法总结

测试代码:

  • pojo类:

package com.lky.h1;

public class Base {

    private Integer id;
    protected String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Base [id=" + id + ", name=" + name + "]";
    }

}
  • test1类

package com.lky.h1;

import org.junit.Test;

/**
* @ClassName: test1
* @Description: 同一个包内测试protect属性
* @author Administrator
* @date 2015年10月13日
*
 */

public class test1 extends Base{

    /**
    * @Title: testBase
    * @Description: 父类本身的访问
     */
    @Test
    public void testBase(){
        Base base=new Base();
        base.setId(10);
//        base.id=9; 同一个包内private属性不能直接访问
        base.name="lky";//同一个包内protect属性可以直接访问
        System.out.println(base);
    }

    /**
    * @Title: testExends
    * @Description:  子类的访问
     */
    @Test
    public  void testExends(){
        test1 a=new test1();
        a.name="lky";//protect属性在子类中可见,可以直接访问
        a.setId(10);//private属性在子类中不可见,不能直接访问
        System.out.println(a);
    }
}
  • test2类

package com.lky.h2;

import org.junit.Test;

import com.lky.h1.Base;

public class test2 extends Base {
    @Test
    public void testBase() {
        Base base = new Base();
        // base.name="lky";不能直接访问
        // base.id=10; 不能直接访问
        base.setName("lky");
        base.setId(10);
        System.out.println(base);
    }

    @Test
    public void testExends() {
        test2 a = new test2();
        a.name = "lgh"; //可以直接访问
//        a.id = 10;    //不能访问
        a.setId(10);
        System.out.println(a);
    }

}

总结:假设有类A和类B,且A类中有一个值属性为protect

  1. 若A和B在同一个包下:在B类中是可以通过A直接访问A中的protect属性,实验如test1的testBase
  2. 若A和B在同一个包下,并且B继承于A:在B类中也是可以直接访问A中的protect属性,实验如test1的testExtends
  3. 若A和B不在同一个包下:在B类中是不可以通过A来访问A中的protect属性,即该属性在B类中不可见,实验如test2中testBase
  4. 若A和B不在同一个包下,并其B继承于A:在B类中是可以访问到A中的protect属性,实验如test2的testExtends
时间: 2024-10-11 18:31:25

java中protect属性用法总结的相关文章

java中stringBuilder的用法

java中stringBuilder的用法 String对象是不可改变的.每次使用 System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新的 String对象相关的系统开销可能会非常昂贵.如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类.例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能. 通过用一个重载的

跟王老师学集合(十一)java中Comparator的用法

Java中Comparator的用法 主讲人:王少华  QQ群号:483773664 在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标. 接下来我们模拟下在集合对象中对日期属性进行排序 一.实体类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package chapter07_11; public class Person {     private int a

Java中System.setProperty()用法

Java中System.setProperty()用法 /* * 设置指定键对值的系统属性 * setProperty (String prop, String value); *  * 参数: * prop - 系统属性的名称. * value - 系统属性的值.   *  * 返回: * 系统属性以前的值,如果没有以前的值,则返回 null. *  * 抛出:   * SecurityException - 如果安全管理器存在并且其 checkPermission 方法不允许设置指定属性. 

.NET中的属性用法分析

GPS平台.网站建设.软件开发.系统运维,找森大网络科技!http://cnsendnet.taobao.com来自森大科技官方博客http://www.cnsendblog.com/index.php/?p=516 这篇文章主要介绍了.NET中的属性用法,分析了.NET中属性的功能.定义与具体用法,具有一定参考借鉴价值,需要的朋友可以参考下本文实例分析了.NET中的属性用法.分享给大家供大家参考.具体分析如下:1.What?什么是属性属性是对字段的封装.当类中有了一个字段以后,为了控制这个字段

java中静态属性和和静态方法的继承问题 以及多态的实质

首先结论是:java中静态属性和和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成的,不需继承机制就可以调用如果子类里面定义了静态方法和属性,那么这时候父类的静态方法 或属性称之为“隐藏”,你如果想要调用父类的静态方法和属性,直接通过父类名.方法名或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是 跟实例方法和属性不太一样,存在“隐藏”的这种情况. 多态之所以能够实现是依赖于 继承 接口和 重写 .重

Java中输入的用法

Java中输入 1. 读取输入 1)构建一个Scanner,附属到System.in Scanner in = new Scanner(System.in); 此时可以使用Scanner类的各种方法来读取输入.例如:nextLine方法来读取一行输入 System.out.print("What is your name?"); String name = in.nextLine(); nextLine():    读取的一行中可能包含空格 next():           读取单个

为什么JAVA中的属性不能覆盖而方法却可以覆盖

以前还真就没有想过这个问题,今天上课的时候 徐老师提出了这么一个问题,在java中是属性重要?还是方法重要? 徐老师形象的讲了这么一个比喻来解释了java中属性与方法的地位 李嘉诚很有钱, 李嘉诚如果在程序中 他的资产的数目就可以被认为是他的一个属性. 李嘉诚还有一个儿子,他的儿子也有资产 但他的资产是他自己的,银行也不可能 同意李嘉诚儿子的资产就因为是他的儿子就把李嘉诚的资产覆盖掉.... 所以说JAVA中最重要的是属性~~~ 一个程序最重要的是数据...这个我非常认同,因为软件无非就是信息的

Java中List的用法

List接口对Collection进行了简单的扩充. 它的具体实现类常用的有ArrayList和LinkedList. ArrayList从其命名中可以看出它是以一种类似数组的形式存储,因此它的随机访问速度极快,但插入和移除元素的速度很慢. LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作,不适合随机访问,LinkedList可以当作堆栈.队列和双向队列使用. 一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插

Java中的属性和字段有什么区别

1.Java中的属性和字段有什么区别? 答: Java中的属性,通常可以理解为get和set方法. 字段,通常叫做“类成员”. 属性只局限于类中方法的声明,并不与类中其他成员相关.例如: void setA(String s){} String getA(){} 当一个类中拥有这样一对方法时,我们可以说,这个类中拥有一个可读写的 a 属性(注意是小写a).如果去掉了set的方法,则是可读属性,反之亦然. 类成员(字段),通常是在类中定义的类成员变量,例如: public class A{ pri