问个有关问题:类的私有成员是可以继承的,对还是错
问个问题:类的私有成员是可以继承的,对还是错?我一直都认为类的私有成员是不可以被继承的。但是有人说可以
问个问题:类的私有成员是可以继承的,对还是错?
我一直都认为类的私有成员是不可以被继承的。但是有人说可以继承,通过以下的代码来说明的:
Java codeclass 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属性已经被子类继承,那么就应该可以直接访问这个属性,可事实确实不可直接访问的。
因此,再绕回来,一句话:父类的私有属性是不能够被子类继承的