我有3个班:
public class Alpha {
public Number number;
}
public class Beta extends Alpha {
public String number;
}
public class Gama extends Beta {
public int number;
}
Run Code Online (Sandbox Code Playgroud)
为什么以下代码编译?而且,为什么测试通过没有任何运行时错误?
@Test
public void test() {
final Beta a = new Gama();
a.number = "its a string";
((Alpha) a).number = 13;
((Gama) a).number = 42;
assertEquals("its a string", a.number);
assertEquals(13, ((Alpha) a).number);
assertEquals(42, ((Gama) a).number);
}
Run Code Online (Sandbox Code Playgroud) 我一直在使用一本迄今为止非常出色的Java书籍,但它并没有很好地解释我们使用setter和getter的原因.我搜索了其他帖子,但没有一个真正帮助过我.我将从书中发布一个程序并解释我的问题.
package lesson1;
public class GoodDog {
private int size;
public void setSize(int sz){
if(sz > 10){
size = sz;
}
}
public int getSize(){
return size;
}
}
Run Code Online (Sandbox Code Playgroud)
二等:
package lesson1;
public class GoodDogTestDrive {
public static void main(String[] args) {
GoodDog one = new GoodDog();
one.setSize(15);
System.out.println(one.getSize());
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的第一篇文章,所以如果没有代码那么请原谅我.不要问为什么这些课程被命名为,我没有想象力,只是使用了这本书的名字.
无论如何,我的理解是封装(对我来说这基本上意味着getter和setter)阻止了对即时变量的直接访问.唯一有效的原因是因为不应允许某些即时变量值.
比如说我们有int高度; (即时变量)我们不应该说object.height = 0; ('object'是随机引用变量).在我的小程序中,它只是一个狗的高度,只是一个简单的限制.这并不意味着有意义,但我只是想弄清楚这个概念.当程序员需要使用彼此的代码时,封装是否仅仅适用于编程公司.比如,以游戏为例,还是与众不同?
我观看了一段视频,说它只是简化了代码管理.但是我仍然不觉得我完全理解这个概念.有人可以用简单的语言向我解释.请注意,我是初学者,不会理解涉及中间代码的示例.
谢谢您的帮助.