为什么使用接口不用实现类

来源:百度知道 编辑:UC知道 时间:2024/05/27 13:40:17
本人刚接触面向对象,有些菜鸟问题请教大侠!
经常看到这样的代码:
Interface IA //接口
{ public toString(); }
Class AClass : IA //实现类
{
public string toString()
{ ... }
}

然后调用的时候
IA ia = new AClass();
IA.toString();
为什么都是用接口,而不直接用实现类呢?如下:
AClass a = new AClass();
a.toString();

面向对象是解决软件需求的变化而产生的,他的目的就是让需求变化时软件的改动达到最小化。如果只是一个IA接口,一个AClass类,IA接口就是多余的,你直接用实现类就可以了。

如果又来了一个BClass,也需要toString()方法。
用实现类可能忘了在BClass中定义toString()方法,但让BClass实现IA接口,就必须在BClass中实现toString()方法,不然编译不通过,这是接口的第一个好处:强制实现。

如果要把IA ia = new AClass();换成new BClass();
用实现类需要修改两行,AClass a = new AClass();换成BClass b = new BClass();,a.toString(); 换成b.toString();
用接口只需要修改一行,IA ia = new AClass();换成IA ia = new BClass();
而IA.toString();是不需要修改的,这是接口的第二个好处:抽象行为。

首先要说的是你的接口写的是错的,应该是
Interface IA //接口
{ string toString(); }

接口中是不会定义方法的修饰符的。

接口其实就是类和类之间的一种协定,一种约束,是一种通信约束。接口中所有的方法否是抽象的。

因为子类继承的是父类的借口,所以我们可以用子类去实例化这个父类,然后就可以直接去调用接口中的方法,当然了,方法的实现还是在子类中的。

继承接口的子类中可能会有除了接口定义之外的方法,使用IA ia = new AClass();这种方式实例化的时候是调用不到接口之外的方法的。

希望我的回答对你有帮助

呵呵,楼上几位说的那些好处我就不在重复了。
"IA ia = new AClass();"其实这句话如果只是放在代码里面看,我个人认为作用确实不大,但是楼主可以设想一下,假如说,我们现在有一个项目,需要50个人来合作开发,那"IA ia = new AClass();&