首先,什么是面向接口编程?我想你理解片面了,举个简单的例子,如:
ArrayList l = new ArrayList();
像这样就是面向实现编程,我们希望面向接口编程,如下:
List l = getContainer("java.util.Vector");
其中的getContainer可能有这样一个实现
public List getContainer(String listName) throws Exception {
return (List)Class.forName(listName).newInstance();
}
像上面的例子中,你可以把ArrayList的对象赋值给List的引用,也可以把Vector或是Stack等的对象赋值给List的引用,如果你用
ArrayList l = getContainer("java.util.Vector");
就出错了,没有办法像面向接口编程那样灵活了
面向接口编程的一个目的就是让设计更有灵活性
至于你说的多继承,c++中确实是这种模式,用这种模式,也就不需要接口了。java为什么摒弃这种方式,是为了编程简单,如果你学过c++,你应该知道多重继承带来的方法相同(如a中有个method方法有个默认实现,b中也有个方法method含有默认实现,此时如果c类同时继承a和b就会出现方法冲突)处理是比较麻烦的,编程人员觉得麻烦,编译器的实现也很麻烦。
至于异常问题,如果一个方法出现异常了,表示这个业务出现问题了,还有走下去的意义么?!
比如一个简单银行转账,你从a银行转出,准备转到b银行,而你在转出的时候抛出异常了,转出失败,此时还有必要转进b银行么!
try...catch的作用无非如下几点:
1、try里面的东西对业务影响不大,出错就出错,直接catch掉就得了
2、try里面的东西是业务的核心,一旦抛异常,业务一定就失败了,此时可以catch一下,打个日志什么的,然后异常继续向上抛
3、try里面可能抛出让人难以理解的异常,此时可能需要catch一下,在catch中重新抛出一个容易理解的异常,这相当于异常转换
面向接口的编程主要是一个高层次的设计,就像计算机网卡一样,网卡很多人在做,但是基本功能都一样,这个基本功能的出台就是一个面向接口的过程,你不可能知道各个厂家各自实现功能的手段,但是你只需要定义他要实现那些功能就是。这就是一个接口的过程。面向接口的编程只有当你到达一定层次的时候才有体会的,很不幸我还没达到。
接口的代码复用性,接口一般定义的都一些最抽象的东西,这就注定了他本身是不实现任何功能的,所以也谈不上什么复用性了,接口也没什么代码给你用,相反你还要必须实现接口定义的功能。而且在实际的时候接口一般只定义一些最基本的行为,而初步实现则是交付给抽象类,最后的功能还是留你自己了。这个三部曲也时很多接口实现模式的过程。
关于异常,有的异常是程序自己的原因,比如空指针,越界之类,这类异常就要避免了,而有些异常则是外界原因,比如保存文件时磁盘控件不足,这个时候你就捕获异常提示用户了,不能没保存成功也不提示用户。“要做的内容”就是避免代码原因造成的异常,就想前面的空指针 越界。“出现的异常处理”则是一个程序的完善过程,就如保存文件时磁盘控件不足,你不能说什么都不提示直接退出程序,然后人家需要文件的时候发现没有这个文件,所以你要提示用户没有保存成功。让用户重新选择路径再次保存,直到保存成功。
我的笔记:
类A想要使用类B中的方法时有两种方式:
●一种是在类A中直接使用import语句将类B引入,然后在类A中直接实例化类B的对象,然后用该对象去调用其内的方法。
●另一种方法是在两者之间创建一个接口,一旦类B实现了这个接口,类A就可以通过使用此接口使用类B,当然也就可以使用类 B中的方法了,但都是间接的使用即使用类B中的方法的代码写在了接口(方法)中,使用这种方式的目的是降低模块间的耦合性。即面向对象系统就是由相互通信的对象组成,如果遵循接口来编写代码,一个类与另个类通信时,就不用对另一个类了解太多,两个类相互了解得越少,它们相互间的耦合就越松。
异常的我就不多说了,你是纯理论型的,首先并不是每一个方法都会抛出异常,只有个别的方法是需要抛出异常的,像你说的当然可以都放在一起处理了,前提是你的有可能抛出异常的语句能那么集中在一起吗,其实说这些都没用,具体做的时候你就知道了。不要怀疑sun
接口是一种规则体现可扩展性,继承体现重用.至于异常.我们的目标的没有异常发生.要有一堆异常等着分离.可想你的程序…
所有的异常都是通过扩展Exception类来实现的,所以,如果不知道会抛出什么异常的时候,你可以用Exceptioin来捕捉。一般来说,构造自己的异常类的时候都应该扩展Exception,如
public class NotPluralExceptionextends Exception{
public NotPluralException(String msg){
super(msg);
}
}
然后在你程序中可以用自己定义的异常
public class Plural{
int value ;
public Plural(int i,int t) throws NotPluralException{
value = i * i;
if(value/1 == value){
}else{
throws new NotPluralException("不是复数");
}
}
}
所以在捕捉的时候就可以写
try{
...
}catch(NotPluralException e){
e.printStackTrace();
}