Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 与子类化相关的OO设计问题_Oop - Fatal编程技术网

Oop 与子类化相关的OO设计问题

Oop 与子类化相关的OO设计问题,oop,Oop,我有一个父bean,它有一个实例变量,如下所示: 公共类ParentBean{ 受保护的布尔显示;//此变量将用于显示某些UI组件 公共无效操作(){ //在此处更新显示变量 } 公共布尔isShow(){ 回归演出; } } 如果我想在子bean中重用“show”变量(显示特定于子bean的其他UI组件),这是一个好的设计,如下所示: 公共类ChildBean扩展了ParentBean{ //从父bean重写操作方法 公共无效操作(){ //在此处更新显示变量 show=真/假; }

我有一个父bean,它有一个实例变量,如下所示:

公共类ParentBean{
受保护的布尔显示;//此变量将用于显示某些UI组件
公共无效操作(){
//在此处更新显示变量
}
公共布尔isShow(){
回归演出;
}    
}
如果我想在子bean中重用“show”变量(显示特定于子bean的其他UI组件),这是一个好的设计,如下所示:

公共类ChildBean扩展了ParentBean{
//从父bean重写操作方法
公共无效操作(){
//在此处更新显示变量
show=真/假;
}           
}
实际上,show变量是由“childBean”通过重写action()方法更新的。
这是一个好的设计实践吗?否则,为了完成这项工作,必须在ChildBean中重复同样的操作。

确实如此。拥有受保护的
变量意味着您可以将其修改为父类或子类(请记住,每个类的每个单个实例都有自己的属性值)。因此,如果您有一些对所有孩子都有价值的通用功能:

父类:

公共作废操作(){
//在此处更新显示变量
show=true;
}
因此,如果您想在特定子系统中添加一些额外的功能:

子类:

@覆盖
公共无效行动(){
super.action();
//这里有额外的功能
//您还可以访问父级的“受保护”字段
如果(显示){
系统输出打印项次(“显示”);
}
}
使用示例:

Parent p=newparent();
p、 动作()//什么也不印
Child c=新的Child();
p、 动作()//打印“显示”

是的。拥有受保护的
变量意味着您可以将其修改为父类或子类(请记住,每个类的每个单个实例都有自己的属性值)。因此,如果您有一些对所有孩子都有价值的通用功能:

父类:

公共作废操作(){
//在此处更新显示变量
show=true;
}
因此,如果您想在特定子系统中添加一些额外的功能:

子类:

@覆盖
公共无效行动(){
super.action();
//这里有额外的功能
//您还可以访问父级的“受保护”字段
如果(显示){
系统输出打印项次(“显示”);
}
}
使用示例:

Parent p=newparent();
p、 动作()//什么也不印
Child c=新的Child();
p、 动作()//打印“显示”

如果在子类中使用
show
变量用于相同的目的,就像在本例中所做的那样,那么显然应该重用它,因为否则只需编写两次相同的代码,这与OOP的观点相反

一般来说,在OOP中,在子类中重写超类方法以及修改超类实例变量是很常见的,只要您知道所修改的变量用于什么(您不希望在您不完全理解的类中随机更改实例变量,或者无法访问其源代码,因为您不希望出现任何不幸的副作用),因此,如果是您自己的代码,这是绝对正确的


一般来说,如果您的选项是复制和粘贴大量代码,然后不加修改地使用它,或者子类化并使用超类的实例变量或函数,那么最好是子类化。否则,您就错过了OOP的要点。

如果您在子类中使用
show
变量的目的相同,则如果您在本例中似乎在做什么,那么显然您应该重用它,因为否则您只需编写两次相同的代码,这与OOP的观点相反

一般来说,在OOP中,在子类中重写超类方法以及修改超类实例变量是很常见的,只要您知道所修改的变量用于什么(您不希望在您不完全理解的类中随机更改实例变量,或者无法访问其源代码,因为您不希望出现任何不幸的副作用),因此,如果是您自己的代码,这是绝对正确的


一般来说,如果您的选项是复制和粘贴大量代码,然后不加修改地使用它,或者子类化并使用超类的实例变量或函数,那么最好是子类化。否则,您就错过了OOP的要点。

更改子类中的值不会影响超类变量g>


就设计而言,这很好。当实例化子类对象时,它将具有不同的变量副本。如果实例化超类对象,它将具有不同的副本。

更改子类中的值不会影响超类变量


就设计而言,这很好。当实例化子类对象时,它将有一个不同的变量副本。如果实例化超类对象,它将有不同的副本。

I这绝对好。如果基类允许,派生实现可以修改基类对象的状态。@Atu我请记住将你的问题标记为已回答(或者如果你认为这不是一个好答案,请讨论它)。这是对最佳答案作者的奖励。我提到这一点是因为我没有回答你。@Xtreme Biker:是的,我真的很抱歉,这不应该发生,但我还没有研究答案,肯定会去的