zoukankan      html  css  js  c++  java
  • java类成员的默认可访问性是什么?你猜

    先看下面TestModel:

    import org.apache.commons.collections4.BidiMap;
    import org.apache.commons.collections4.bidimap.DualHashBidiMap;
    
    public class TestModel {
        BidiMap bidiMap = new DualHashBidiMap();
    
        BidiMap getBidiMap() {
            bidiMap.put("testkey","testvalue");
            return bidiMap;
        }
    }

    运行下面测试代码,你猜结果会是什么?

        @Test
        public void test() {
            TestModel testModel = new TestModel();
            System.out.println(testModel.bidiMap.size());
            testModel.getBidiMap();
            System.out.println(testModel.getBidiMap().getKey("testvalue"));
        }

    结果是:

    0
    testkey

    结论:

    (1)一个类的属性和方法,在不加访问修饰符的情况下,可访问性默认可不是private哦!    所以,在定义类成员时,注意使用修饰符来限定可访问性。  按照编程规范,将成员变量定义成private,即限定为私有字段,然后通过get/set方法将其暴露出去。

    (2)从上面案例可以看出来,直接访问TestModel的bidiMap时,与getBidiMap()无关,jvm并不会执行这个get方法。

    (3)诸如上面的TestModel,定义的就不好,可读性差,容易给人造成误解。bidiMap和getBidiMap()都能被外界访问,那么别人在使用TestModel时就会模棱两可。

    (4)补充(1):默认可访问性既然不是private,那是什么?——————是protected。怎么理解这个protected呢?首先是可以在派生类是可见的,其次呢,是在当前package下也是可见的。上面的test方法,就要求与TestModel在同一个package下。否则,编译器会编译不通过,会提示错误:'bidiMap' is not public in 'package1.TestModel'. Cannot be accessed from outside package.

  • 相关阅读:
    Kubernetes二进制文件下载链接
    Python 中取代 Printf 大法的工具
    Python 七步捉虫法
    改善 Python 程序的 91 个建议
    最全的 API 接口集合
    一个可能是世界上最全的 API 接口集合库开源项目
    优质中文NLP资源集合,做项目一定用得到!
    Flair:一款简单但技术先进的NLP库
    取代 Python 多进程!伯克利开源分布式框架 Ray
    使用 PyHamcrest 执行健壮的单元测试
  • 原文地址:https://www.cnblogs.com/buguge/p/11833669.html
Copyright © 2011-2022 走看看