关于继承的设计

我将成员变量称之为类的属性,  将成员函数称之为类的接口

关于子类继承父类,  比较让我蛋疼的用法就是在子类中直接使用父类的成员变量,  且不说父类完全有可能不是自己设计的, 就算是自己设计的, 也许已经过了N久了, 再次使用父类里面的属性时都要想一下这个属性到底是干什么用的.
比如当时写了一个类:Parent,  而且也就是在当时, 还写了一个子类:Man,  然后在Man这个类中直接对Parent的属性进行操作.  然后又过了N久,  某一位新人接手先人写的代码,  但是它只拿到了Man的代码,  并没有Parent的代码,  看的时候就会郁闷, 有些属性明明没有,  为毛会在Man里面使用了呢, 当然了,细想一下可以推断出某些属性是在其父类中定义的,  这是简单的继承,  如果对于一个杂而庞大的类网络而言,  这样的写法,  会让后人骂他祖宗十八代.

人个的看法,  对于一个类而言,  所有的属性都是它自己的特性,  就将这些属性全设置为private吧,  如果某些属性是想让所有外部都可以调用的话,  就对这些属性写两个public的接口,  一个用来读, 一个用来写. 或者是只能读不能写.   再有一些属性是希望子类可以使用, 但是不对外公开的话,  就对这些属性写些protected的接口吧.  即,  想对某个对象属性进行操作,  不管是不是不相关的类,  又或者是子类,  请通过接口来操作!   这样在看子类代码的时候,  就不会有时候看到莫名其妙的对某个属性进行的操作.

关于继承的设计

时间: 2024-10-09 09:43:40

关于继承的设计的相关文章

以MyBatis+SpringMVC3.0实现的,借鉴了Hibernate设计思想,采用封装、抽象、继承的设计思想,做到了数据与相应的操作的高内聚低耦合的实现

QQ:1138789752 Email.java类: package com.lmc.ink.entity.seo; import com.lmc.ink.entity.IEntity; /** * 推广邮箱表(s_email)实体类 * @author lmc * */ public class Email extends IEntity { /** * 唯一标识 * */ public static final long serialVersionUID = 537132705L; /**

MDI和继承窗体设计

MDI窗体设计:(Multiple-Document Interface) 用途:用于同时显示多个文档,每个文档显示在各自的窗体中. 起到容器作用的窗体被称为"父窗体",可放在父窗体中的其他窗体称为"子窗体",也称为"MDI子窗体". 每个应用程序只能有一个父窗体,并且其他子窗体不能移出父窗体的框架区域. 1.设置父窗体: 在窗体的属性面板 将IsMdiContainer属性设置为True即可 2.设置子窗体: 通过设置窗体的MdiParent属

Effective Java 第三版——19. 如果使用继承则设计,并文档说明,否则不该使用

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 19. 如果使用继承则设计,并文档说明,否则不该使用 条目 18中提醒你注意继承没有设计和文档说明的"外来"类的子类化的危险. 那么为了继承而设计和文档

Java之用继承进行设计详解(附源码)

前言 学习了多态之后,看起来似乎所有东西都可以被继承,因为多态是一种如此巧妙的工具.事实上,当我们用现成的类来建立新类时,如果首先考虑使用继承技术,反倒会加重我们的设计负担,使事情变得不必要地复杂起来. 更好的方法是首先选择"组合",尤其是不能十分确定应该使用哪一种方式时.组合不会强制我们的程序设计进入继承的层次结构中.而且,组合更加灵活,因为它可以动态选择类型(因此也就选择了行为):相反,继承在编译时就需要知道确切类型.下面举例说明这一点: 示例源码 package com.mufe

javascript 继承机制设计思想

作者: 阮一峰 原文链接:http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html 我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instance)的区分,全靠一种很奇特的"原型链"(proto

WPF 继承自己设计的窗体控件

baseWin不能有XAML文件,只能是一个类 namespace WPFStudy { public class MyBaseWin : Window { public MyBaseWin(int w, int h, String title) { this.WindowStartupLocation = WindowStartupLocation.CenterScreen; this.Width = w; this.Height = h; this.Title = title; this.F

Effective C++ -- 继承和面向对象设计

32.确保你的public继承了模is-a关系 public继承意味着is-a关系(里氏替换原则),一切适用于基类也适用于派生类. 矩形继承正方形问题: 可实施与矩形的操作无法实施与正方形 在编程领域.正方形是一种矩形是错误的 在现实领域,正方形是一种矩形是正确的 33.避免遮盖继承而来的名称 class Base { private: int x; public: virtual void mf1() = 0; virtual void mf1(int); virtual void mf2()

WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计

上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依据?面向对象的设计经验有何值得借鉴的地方?这里我们会一一给出详细的介绍.本文首先介绍的是WCF服务中契约继承的一些概念.例子代码分析,其次来讲解服务契约的设计问题.首先介绍的也是进行服务设计的必要性,服务设计的原则,示例代码分析.最后是全文的总结部分.结构如下:[1]OO面向对象设计原则,[2]服务

逻辑数据库设计 - 可变属性(继承)

可变属性的需求:我们需要在数据库里面存储很多电器,比如电视,冰箱等等.通常,在程序中,我们的类图为: EVA设计 对于这种继承下来的可变属性时,有一种办法是创建另外一张表,将属性当成行来存储. 其中存储的数据类似下面这样: 这样的设计称为:实体-属-值,简称:EVA,或者又叫开放架构.无模式. 这种设计有如下3种好处: 1.这两张表的列都很少. 2.新增的属性不会对现有的表结构造成影响,不需要新增列. 3.避免由于空值而造成的表内容混乱. 但是这样也有如下缺点: 1.查询属性 本来,我们想要按出