讨论一下抽象类与接口的区别?

hiloves 2006-03-17 11:29:07
有时抽象类和接口的作用一样,都可以让方法在子类中具体实现。只不过使用接口可以多重继承。他们在其他方面有什么区别?特别是最近在看设计模式,有时用的抽象类,有时又用接口。Faint。
...全文
281 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liang8305 2006-03-20
  • 打赏
  • 举报
回复
学习,占个位置
luoluonet 2006-03-20
  • 打赏
  • 举报
回复
抽象类中有实例变量,一般也包含一个显式的构造函数,用于子类

继承(extends),只是其中有些方法没有方法体,要等各种子类来实现各种不同的细节,而接

口中没有实例变量,只有一系列无方法体的抽象方法用于被各种类来实现(implements)。不

相关的类可以实现同一个接口(接口的强大之处),而不相关的子类却不可以继承同一个抽象

类(继承同一个抽象的各个子类一定是相关的,因为构造函数是一致的)。
grant999 2006-03-20
  • 打赏
  • 举报
回复
接口有属性,默认是static final
CYG369 2006-03-20
  • 打赏
  • 举报
回复
首先,采用他们都是为了禁止生成该类的实例,作为一个父类使用;
第二,抽象类中可以有成员变量,可以有抽象方法(需要继承他的子类去实现, 如果他的子类没有实现该抽象方法,则该子类也必须是个抽象类!),也可以有带有方法实体的方法;
而在接口中,只定义一些公共的方法名及其参数列表(同样需要实现(其实就是 继承)他的类去实现,也同样如果实现他的类没有实现接口中定义的方法,则此 类也必须是个抽象类!)。接口中没有成员变量,但它可以定义常量(必须初始化),但一般不这样做(除非一定要用接口进行常量管理),以保证接口的整洁 。
第三,java中的单继承性,接口可以多重继承 , 抽象类不可以.
所以,抽象类和接口适用的原则是:大多数情况下,应该首选接口去实现,除非 确实需要带有成员变量(或是带有方法实体的方法),再选择抽象类。
zeq258 2006-03-20
  • 打赏
  • 举报
回复
f_acme(沧海一声笑)

很清晰,学习下!

谢谢!
crazycy 2006-03-20
  • 打赏
  • 举报
回复
学习,占个位置,兔,然后友情UP,攒rp
gggggame 2006-03-19
  • 打赏
  • 举报
回复
比较同意楼上的
zousoft 2006-03-19
  • 打赏
  • 举报
回复
我是这样理解的,如果要做一个纯抽象类,也就是不包括任何非抽象方法,那么就用接口而不用抽象类。接口好处多多,是抽象类的进化产物。
如果还是要使用一些接口没有的东西,比如还是要用一些非抽象方法,没有办法,只能继续使用传统的抽象类了。
zengxftm 2006-03-19
  • 打赏
  • 举报
回复
抽象类可以有某个方法的具体实现,它的子类可以继承它的方法完成同样的功能,减少了不必要的重复劳动;
而接口只是给出了某些方法的模版,而没有具体的实现,实现它的类还得重新写它的具体操作。
UglyTroLL 2006-03-19
  • 打赏
  • 举报
回复
精华区有,或者我的blog:uglytroll.yculblog.com
上面有对这个问题的讨论
francis_zj 2006-03-19
  • 打赏
  • 举报
回复
抽象类可以有具体的实现,但接口却不可以,一个类只有1个抽象类,但可以有多个接口



suncheng_hong 2006-03-18
  • 打赏
  • 举报
回复
接口的成员属性为final 型的
glorywine 2006-03-18
  • 打赏
  • 举报
回复
继承是单一的
而接口可以有多个
f_acme 2006-03-18
  • 打赏
  • 举报
回复
interface里面没有提供任何具体实现,可以说是一个极度抽象的类,他允许你创建一个能够被向上转型为不止一种基类型的类,以此来实现多重继承。
而抽象类则包含一种或多种抽象方法的类,且可以提供具体的实现。定义抽象类后,其它类可以对它进行扩充并且通过实现其中的抽象方法,使抽象类具体化。

Java中的接口和抽象类的区别,在于接口中没有属性,而且所有的方法都是抽象的,而抽象类可以有属性,而且可以有抽象方法,也可以有实现的方法。但两者都不能被实例化。
使用的时候,一个类可以继承多个接口,但只能继承一个抽象类。
qIwEiXuE 2006-03-17
  • 打赏
  • 举报
回复
如果是抽象类,大概与特定类的继承框架耦合的紧点...
如果是接口,那很智能拉,不关联特定的类继承...

==
偶是这么理解的!
C#设计模式(1) 一、 C# 面向对象程序设计复习 二、 设计模式举例 三、 先有鸡还是先有蛋? 四、 大瓶子套小瓶子还是小瓶子套大瓶子? 五、 .net本质 C#设计模式(2) 一、 "开放-封闭"原则(OCP) 二、 里氏代换原则(LSP) C#设计模式(3) 三、 依赖倒置原则(DIP) 四、 接口隔离原则(ISP) 五、 合成/聚合复用原则(CARP) 六、 迪米特法则(LoD) C#设计模式(4)-Simple Factory Pattern 一、 简单工厂(Simple Factory)模式 二、 Simple Factory模式角色与结构: 三、 程序举例: 四、 Simple Factory模式演化 五、 优点与缺点: C#设计模式(5)-Factory Method Pattern 一、 工厂方法(Factory Method)模式 二、 Factory Method模式角色与结构: 三、 程序举例: 四、 工厂方法模式与简单工厂模式 五、 Factory Method模式演化 六、 Factory Method模式与其它模式的关系 七、 另外一个例子 C#设计模式(6)-Abstract Factory Pattern 一、 抽象工厂(Abstract Factory)模式 二、 Abstract Factory模式的结构: 三、 程序举例: 四、 在什么情形下使用抽象工厂模式: 五、 抽象工厂的起源 六、 Abstract Factory模式在实际系统中的实现 七、 "开放-封闭"原则 C#设计模式(7)-Singleton Pattern 一、 单例(Singleton)模式 二、 Singleton模式的结构: 三、 程序举例: 四、 在什么情形下使用单例模式: 五、 Singleton模式在实际系统中的实现 六、 C#中的Singleton模式 C#设计模式(8)-Builder Pattern 一、 建造者(Builder)模式 二、 Builder模式的结构: 三、 程序举例: 四、 建造者模式的活动序列: 五、 建造者模式的实现: 六、 建造者模式的演化 七、 在什么情况下使用建造者模式 C#设计模式(9)-Prototype Pattern 一、 原型(Prototype)模式 二、 Prototype模式的结构: 三、 程序举例: 四、 带Prototype Manager的原型模式 五、 浅拷贝与深拷贝 六、 Prototype模式的优点与缺点 C#设计模式(10)-Adapter Pattern 一、 适配器(Adapter)模式 二、 类的Adapter模式的结构: 三、 类的Adapter模式示意性实现: 四、 对象的Adapter模式的结构: 五、 对象的Adapter模式示意性实现: 六、 在什么情况下使用适配器模式 七、 一个实际应用Adapter模式的例子 八、 关于Adapter模式的讨论 C#设计模式(11)-Composite Pattern 一、 合成(Composite)模式 二、 合成模式概述 三、 安全式的合成模式的结构 四、 安全式的合成模式实现 五、 透明式的合成模式结构 六、 透明式的合成模式实现 七、 使用合成模式时考虑的几个问题 八、 和尚的故事 九、 一个实际应用Composite模式的例子 C#设计模式(12)-Decorator Pattern 一、 装饰(Decorator)模式 二、 装饰模式的结构 三、 装饰模式示例性代码 四、 装饰模式应当在什么情况下使用 五、 装饰模式实际应用的例子 六、 使用装饰模式的优点和缺点 七、 模式实现的讨论 八、 透明性的要求 九、 装饰模式在.NET中的应用 C#设计模式(13)-Proxy Pattern 一、 代理(Proxy)模式 二、 代理的种类 三、 远程代理的例子 四、 代理模式的结构 五、 代理模式示例性代码 六、 高老庄悟空降八戒 七、 不同类型的代理模式 八、 代理模式实际应用的例子 设计模式(14)-Flyweight Pattern 一、 享元(Flyweight)模式 二、 单纯享元模式的结构 三、 单纯享元模式的示意性源代码 四、 复合享元模式的结构 五、 一个咖啡摊的例子 六、 咖啡屋的例子 七、 享元模式应当在什么情况下使用 八、 享元模式的优点和缺点 设计模式(15)-Facade Pattern 一、 门面(Facade)模式 二、 门面模式的结构 三、 门面模式的实现 四、 在什么情况下使用门面模式 五、 一个例子 六、 使用门面模式的设计 设计模式(16)-Bridge Pattern 一、 桥梁(Bridge)模式 二、 桥梁模式的结构 三、 桥梁模式的示意性源代码 四、 调制解调器问题 五、 另外一个实际应用Bridge模式的例子 六、 在什么情况下应当使用桥梁模式 设计模式(17)-Chain of Responsibility Pattern 一、 职责链(Chain of Responsibility)模式 二、 责任链模式的结构 三、 责任链模式的示意性源代码 四、 纯的与不纯的责任链模式 五、 责任链模式的实际应用案例 六、 责任链模式的实现 设计模式(18)-Command Pattern 一、 命令(Command)模式 二、 命令模式的结构 三、 命令模式的示意性源代码 四、 玉帝传美猴王上天 五、 命令模式的实现 六、 命令模式的实际应用案例 七、 在什么情况下应当使用命令模式 八、 使用命令模式的优点和缺点 设计模式(19)-Observer Pattern 一、 观察者(Observer)模式 二、 观察者模式的结构 三、 观察者模式的示意性源代码 四、 C#中的Delegate与Event 五、 一个实际应用观察者模式的例子 六、 观察者模式的优缺点 设计模式(20)-Visitor Pattern 一、 访问者(Visitor)模式 二、 访问者模式的结构 三、 示意性源代码 四、 一个实际应用Visitor模式的例子 五、 在什么情况下应当使用访问者模式 六、 使用访问者模式的优点和缺点 设计模式(21)-Template Method Pattern 一、 模板方法(Template Method)模式 二、 模版方法模式的结构 三、 模板方法模式的示意性代码 四、 继承作为复用的工具 五、 一个实际应用模板方法的例子 六、 模版方法模式中的方法 七、 重构的原则 设计模式(22)-Strategy Pattern 一、 策略(Strategy)模式 二、 策略模式的结构 三、 示意性源代码 四、 何时使用何种具体策略角色 五、 一个实际应用策略模式的例子 六、 在什么情况下应当使用策略模式 七、 策略模式的优点和缺点 八、 其它

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧