首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

问个有关问题:类的私有成员是可以继承的,对还是错

2012-03-20 
问个问题:类的私有成员是可以继承的,对还是错?我一直都认为类的私有成员是不可以被继承的。但是有人说可以

问个问题:类的私有成员是可以继承的,对还是错?
我一直都认为类的私有成员是不可以被继承的。但是有人说可以继承,通过以下的代码来说明的:

Java code
class Father {    private String name;    public void setName(String name) {        this.name = name;    }    public void call() {        System.out.println(name);    }    private void f1() {        System.out.println("in f1");    }    public void f2() {        f1();    }}class Son extends Father {}class T {    public static void main(String[]args) {        Son s1 = new Son();        s1.setName("son");        s1.call();        s1.f2();    }}


但是我认为这个代码也不能说明类的私有成员是可以继承的啊!
我觉得只不过就是son类调用了其父类的setName()方法,而实际操作这个name的是Father类。
这么理解对不?请教高手!

[解决办法]
类的私有属性是不能被子类继承的
只能通过类提供的get和set方法进行访问(不是其子类的类也可以通过get和set方法进行访问)
这样做一方面是安全上得考虑,比如一个需求是要100以内的一个数i,如果i是public那么就可以随便进行赋值,而通过set方法就会安全(比如在set方法里面设置逻辑);
另一方面是因为private属性是为类的public方法服务的,外部的方法不需要直接对这个属性进行操作,要值得话可以通过方法实现,这样就实现了面向对象的封装特性
具体得好处楼主可以再做项目中体会下(private方法和属性的好处)
并且java bean规范(java官方的一个规范)也建议属性私有,提供get和set方法对属性进行操作,他们虽然是建议,不过楼主就把这个当成必须这样做就好了,这样不会出问题
[解决办法]
private 属性是不能被子类继承的
就像你写的例子中的,你是 Son s1 = new Son(); s1.setName("son");操作的仅仅是父类的setName这个public类型的方法,然后通过setName这个方法操作的name属性,而不是直接操作的name属性。
如果name属性已经被子类继承,那么就应该可以直接访问这个属性,可事实确实不可直接访问的。
因此,再绕回来,一句话:父类的私有属性是不能够被子类继承的

热点排行