日期:2014-05-20  浏览次数:20756 次

java继承的问题
我写了两个类,第一个类Test1:
public class Test1 {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
第二个类Test2继承Test1:
public class Test2 extends Test1 {
public static void main(String args[]){
Test2 t2=new Test2();
t2.setName("a");
System.out.println(t2.getName());
}
}
为什么第二个类中t.setName("a")和t2.getName()都能访问到Test1的private的name?不是说子类不能继承父类的私有成员吗?


------解决方案--------------------
探讨

引用:

又是你,呵呵,那Test2具有name属性吗?引用:

私有成员不能直接访问
setName()和getName()这不算直接访问


Test2有name属性,当然,它是私有的。
即使是私有属性,也只是不能被别的类访问而已,自己还是可以的。
所以在Test2类中,仍然可以直接访……

------解决方案--------------------
是不能继承,但很矛盾的你提供了访问方法。get set
test2是没有name属性的,但是可以通过set get 访问,,这就是封装。。。。。。。。。。
父类不给子类直接访问的权限,但提供了间接访问的方法。

------解决方案--------------------
举个例子说明:Test1类是爸爸,Test2类是儿子,爸爸有自己的钱,儿子没有钱,连卡都没有。 但是爸爸把卖东西和买东西的权利对儿子开放了。 假如爸爸银行卡里面的钱开始为100块钱,然后儿子帮爸爸在卖了一件衣服值50块钱,这时候那爸爸的银行卡里就有150块钱了,后来儿子又帮爸爸买包烟20块钱,银行卡里面钱就只有130块钱了。 但这中间不论什么时候,银行卡里面的钱,都不是儿子的。 儿子在没有去买东西或者卖东西的操作的时候,永远都碰不到这个钱的。

先就这样解释了,看我这解释能不能让楼主理解一下。
------解决方案--------------------
Test1中定义了外部访问Test1中私有属性name的方法,Test2继承了Test1类,同时也继承了Test1中访问name的方法,所以第二个类中t.setName("a")和t2.getName()都能访问到Test1的private的name。
在类的继承中,子类确实不能直接访问父类,直接访问就是 对象名.属性,这样的访问方式就是直接访问类中的属性
------解决方案--------------------
extends继承
楼主可以这么想,就是不管你父类设置了什么权限我都拿过来了
只是你private的话,我就没有你的钥匙,打不开而已。
------解决方案--------------------
探讨

这样是有点明白了,但是假如我的get方法返回的是private属性的一个引用,对于这个get方法返回一个引用,我不就可以任意修改了吗?这样是不是和你说的“令别的类只能通过本类提供的有限方法访问私有属性”矛盾了,举个例子:
假如getName()返回的不是String类型而是我定义Name类型,那么以下操作是不是可以任意访问private属性了?
Name n=new Test1().getN……