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,即限定为私有字段,然后通过getter/setter方法将其暴露出去。
(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.
当看到一些不好的代码时,会发现我还算优秀;当看到优秀的代码时,也才意识到持续学习的重要!--buguge
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/buguge/p/11833669.html