设计模式和设计原则:
设计模式和设计原则是对面向对象程序设计的一个具体应用,为此我们首先需要回顾和总结一下面向对象程序设计的一些基本内容,同时也是为了引出设计模式和设计原则。
1、子类继承所有父类的属性和方法吗?什么是隐藏?什么是覆盖?
解释一:子类是继承了父类的所有属性和方法,但是并不一定都可见,可认为是间接可见。所谓继承就是指你有的我全有,即父类有的子类全都有。
下面一个问题给出了子类是否可见的一个标准。
作用域public,private,protected,以及不写时的区别(不写时默认为friendly)
答:区别如下:
作用域 |
当前类 |
同一package |
子孙类 |
其他package |
Public |
√ |
√ |
√ |
√ |
Protected |
√ |
√ |
√ |
× |
Friendly |
√ |
√ |
× |
× |
Private |
√ |
× |
× |
× |
如下图给出父类和子类的继承关系,绿色部分为父类(其中包括两部分,即对子类不可见①和对子类可见②两部分),绿色加上红色部分③(由子类派生的即子类独有的特性)为子类。说明:①虽然对于子类不可见部分但却是子类必不可少的部分,因为③可能会调用②,而②又可能会调用①,如果子类中没有①,那么程序就会出错。
解释二:关于隐藏是指子类与父类存在同名但是有不同解释的属性和方法,那么父类中这些属性和方法将会被隐藏。举例,在父类中定义一个属性变量i,同时在子类中也定义一个属性变量i,此时父类中的属性变量i将被隐藏或者说屏蔽,程序调用属性变量i时则默认是对子类的属性变量i的调用,同样方法也是如此。
解释三:关于覆盖是指指子类与父类存在相同头部的方法,那么父类中这些的方法将会被覆盖或者说屏蔽。如果程序中需要调用父类中被覆盖的方法则使用super关键字。
2、对象代词的意义?super和this
super:针对隐藏和覆盖来说,大多数情况下我们都是指当前的子类,当我们需要特定
指明访问父类的时候,则使用super.[属性][方法]
this:既然默认情况是指当前的子类也就是说this.加不加都是一样的,那为什么还要用this这个词呢?这是因为this并不是针对super产生的,而是因为我们在程序中的很多的方法需要返回当前对象,这时候this就有重要的作用。因为在很多对象的内部我们是不能直接提到该对象的名称的,程序是不识别的。比如张三说他自己时用“我”而非“张三”,否则这是不符合常规的。
3、重载和覆盖的关系?
相同点:两者都是对一个方法的多次实现,或者都体现了多态性(一个内容有多种形式)
区别:覆盖是指方法头相同时则产生覆盖。如父类和子类有两个方法头完全相同的方法,此时父类的这个方法将被覆盖。
重载是指方法名相同但是参数不同,注意重载不区分父类和子类,即这两个方法即可以都在父类中也可以都在子类中或者一个在父类中一个在子类中。这样当程序调用方法时是根据其中的参数(个数、类型)进行匹配的。
4、接口的作用?
接口主要是为了解决多重继承中继承冗余的问题。所谓继承冗余是指如果B继承A,C也继承A,D继承B同时也继承C,那么D中重复出现了A的内容(既有来自B的也有来自C的),这样就产生的继承冗余的问题。接口实际上相当于一个抽象类,但是它和类的最大区别就是它允许实现多个。通过类实现代码复用叫做继承extends,通过接口实现代码复用叫做实现implements。可以说接口是变相的实现了多重继承同时又避免的继承冗余,所以对于面向对象的程序设计来说是不可或缺的。关键字interface 继承extends 实现implements
5、异常处理的意义?
是为了摒弃错误。try监视可能出错的代码,catch处理机制通过异常对象的类型匹配来选择通过哪种机制处理这个错误。意义所在:(1)、解决了程序错误的问题,可以人工干预、提示或者中止程序。(2)、引入了层次的问题,没有异常处理机制时程序遇到错误采用的办法是以return形式层层传递来处理,
posted on 2006-02-11 22:57
★yesjoy★ 阅读(257)
评论(0) 编辑 收藏 所属分类:
设计模式