java中到底是继承父类变量还是访问父类变量
package com.huawei.test;public class ProtectedVariable extends Parent{public static void main(String[] args) {Parent v1 = new ProtectedVariable();v1.setName("keke8614");System.out.println(v1.getName());Parent v2 = new ProtectedVariable();v2.setName("keke8615");System.out.println(v2.getName());System.out.println(v1.getName());}}class Parent{protected String name;public String getName() {//可能对name进行操作return name;}public void setName(String name) {//可能对name进行操作this.name = name;}}
?
??? 这样设计到底起到了什么好处啊??希望给予正解......
?
1 楼 tangzhibin 前天 保护私有变量、封装数据,将对变量的访问与变量本身区分开;而且还可以在getter和setter方法中做一些数据转换,而不直接操作变量本身,对外部调用者不必关心 2 楼 keke8614 前天 tangzhibin 写道保护私有变量、封装数据,将对变量的访问与变量本身区分开;
而且还可以在getter和setter方法中做一些数据转换,而不直接操作变量本身,对外部调用者不必关心
如果是这样,那protected对父类属性就失去了意义,是不是有更好的解释呢? 3 楼 ohunbeyond 昨天 keke8614 写道tangzhibin 写道保护私有变量、封装数据,将对变量的访问与变量本身区分开;
而且还可以在getter和setter方法中做一些数据转换,而不直接操作变量本身,对外部调用者不必关心
如果是这样,那protected对父类属性就失去了意义,是不是有更好的解释呢?
这种类设计的目的就是用来被继承的,用protected正合适! 4 楼 keke8614 昨天 ohunbeyond 写道keke8614 写道tangzhibin 写道保护私有变量、封装数据,将对变量的访问与变量本身区分开;
而且还可以在getter和setter方法中做一些数据转换,而不直接操作变量本身,对外部调用者不必关心
如果是这样,那protected对父类属性就失去了意义,是不是有更好的解释呢?
这种类设计的目的就是用来被继承的,用protected正合适!
单只用protected是不够的,如果这里不是String对象,而是一个OutputStream对象呢,我们需要子类可以根据自己的需求初始话OutputStream,那此时怎么抉择呢? 5 楼 audrey1226 昨天 keke8614 写道ohunbeyond 写道keke8614 写道tangzhibin 写道保护私有变量、封装数据,将对变量的访问与变量本身区分开;
而且还可以在getter和setter方法中做一些数据转换,而不直接操作变量本身,对外部调用者不必关心
如果是这样,那protected对父类属性就失去了意义,是不是有更好的解释呢?
这种类设计的目的就是用来被继承的,用protected正合适!
单只用protected是不够的,如果这里不是String对象,而是一个OutputStream对象呢,我们需要子类可以根据自己的需求初始话OutputStream,那此时怎么抉择呢?
子类也需要初始父类的变量, 不知道我理解的正确不正确, 我写了个小例子
package entity;
import java.io.OutputStream;
import entity.Father;
public class Son extends Father {
private final OutputStream son;
public Son(OutputStream father, OutputStream son) {
super(father);
this.son = son;
}
class Father {
protected final OutputStream father;
public Father(OutputStream father) {
this.father = father;
}
}
}
6 楼 jackra 23 小时前 如果如文中所述
此处不应用继承
而应使用聚合
private在继承体系确可以体现继承线上的特色。
但如果特色需要被子类使用,private的限制应转变为protected。
此问题是指:使用面向对象的语言,却不用面向对象的思想做事。