zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    react 脚手架cra的注意事项,以及脚手架生成目录的分析,以及四个脚本命令
    react组件传值的方式大全
    leetcode——367.有效的完全平方数
    leetcode——69.x的平方根
    leetcode——169.求众数
    leetcode——100.相同的树
    leetcode——172.阶乘后的零
    leetcode——35.搜索插入位置
    leetcode——26.删除排序数组中的重复项
    leetcode——5.最长回文子串
  • 原文地址:https://www.cnblogs.com/dmir/p/4876038.html
Copyright © 2011-2022 走看看