黑马程序员技术交流社区
标题:
接口与抽象类
[打印本页]
作者:
夏晓彤
时间:
2013-3-9 17:16
标题:
接口与抽象类
本帖最后由 夏晓彤 于 2013-3-9 21:06 编辑
抽象类和接口必须被实现接口的类、子类去实现他们打的方法,接口和抽象类分别在什么情况下使用它们,谁能详细的说说
作者:
scott0610
时间:
2013-3-9 17:57
本帖最后由 袁见 于 2013-3-9 18:27 编辑
解答:接口是一种特殊的抽象类。Java中只支持单继承,可以实现多个接口。可以把接口理解为是java单继承的一种补充!
从某种程度上看 ,接口类似与整个系统的“总纲”,它制定了系统各模版应该遵循的标准,因此,一个系统中的接口不应该经常修改。一旦接口被修改,对整个系统甚至其他系统的影响将是辐射式的,导致系统中大部分都需要修改。
抽象类则不一样,抽象类作为系统中多个子类的共同父类,它所体现的是一种模版式设计。抽象类作为多个子类的抽象父类,可以被当成系统实现过程的中间产品,这个中间产品已经实现了系统的部分功能,但这个产品并不是最终产品,必须进一步完善。
根据以上的阐述,希望对你有所帮助!
作者:
李阳阳
时间:
2013-3-9 18:15
首先要明白什么是抽象类,什么是接口, 抽象类就是里面含有抽象方法,而里面为什么会含有抽象方法呢,
因为抽象类里面的方法主体不确定。例如:
abstract class Animal
{
abstract void cry(); //不确定动物是怎么叫的,在子类中根据需要重写覆盖
}
class dog extends Animal
{
void Cry()
{
System.out.println("汪汪");
}
}
class cat extends Animal
{
void Cry()
{
System.out.println("喵喵");
}
}
接口可以认为是一种特殊的抽象类,因为里面的方法全是抽象的,子类实现接口的时候要全部重写方法,
而接口是可以被类多实现的,例如
interface InterA
{
public abstract void show();
}
interface InterB
{
public abstract void show();
public abstract void showB();
}
/*类C实现接口A、B,即使A和B中有相同的方法名(show())因为没有方法主体,C实现接口的时候
重写哪个方法都一样*/
class C implements InterA,InterB
{
public void show(){};//重写从接口中弄过来的抽象函数。
public void showB(){};
}
作者:
黑马17期-闫东东
时间:
2013-3-9 18:18
abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。也就是java可以单继承,多实现。
作者:
小丑的媳妇2
时间:
2013-3-9 21:04
我来回答你的问题 希望对你有用
在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力
abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,但是有时候还是会有很大区别的
我给你举出两个例子:假设在我们的问题领域中有一个关于Door的抽象概念,该Door具有执行两个动作open和close,
此时我们可以通过abstract class或者interface来定义一个表示该抽象概念的类型,
定义方式分别如下所示:
1.使用abstract class方式定义Door:
abstract class Door
{
abstract void open();
abstract void close();
}
使用interface方式定义Door:
interface Door
{
void open();
void close();
}
从这两个例子中可以可以看书 他们的设计理念有很大不同!
实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
还有就是,abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。
但是,一个类却可以实现多个interface。
具体来说接口和抽象类分别在什么情况下使用它们,你可以这么理解:
例如“动物”你是用接口来描述还是抽象类来描述?都可以,如果你的需求中“动物”的子类有很多共性的方法,
那么你可以用抽象类来描述。如果你的需求中“动物”的子类没有共性方法,那么就用过接口定义不同的方法让子类去实现就可以了。
你的问题到最后就是像上面的例子一样要根据实际情况来决定什么时候用接口什么时候用抽象类。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2