Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 <我是新手>请解答一下接口和抽象类的区别好吗?谢谢!!
zoudejian123





发贴: 4
积分: 0
于 2005-11-16 19:14 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
最近兄弟在学java时,碰到接口和抽象类的问题。自己老是不能把他们区别的很清楚,不知道那位知道的GG/JJ能告诉小弟一下!!在下非常感谢!!



学java的朋友,请一起来投票让sun推出中文jdk文档!!!
作者 Re:<我是新手>请解答一下接口和抽象类的区别好吗?谢谢!! [Re:zoudejian123]
ranchgirl



版主


发贴: 801
积分: 132
于 2005-11-17 02:48 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Interface:接口
Abstract Class:抽象类
Class:类,包括抽象类。
学 Java 的人,或学 OO 编程的人,都是要弄清楚这两个概念的区别。
现将我的观点说一下。
在OO中,Interface 和Abstract Class 是两个不同的概念。

1。Abstract Class类似于 Abstract Data Type(抽象数据类型),它定义了它所有的subclass(子类)应该有的特性,就是在Abstract Class 中声明方法和变量。如定义一种抽象类型:车。那么在Java中,就要在class或method上加上 abstract。举个例:

public abstract class 车
{
public int 轮子;
public abstract void 移动();
}

这个抽象类就声明了所有的车应有的特征(如轮子)和行为(如移动)。之后你就可以扩展(extend)这个抽象类,只要是车,就可以,还有你可以在子类(subclass)中加入自己的特征,如

public class 跑车 extends 车
{
public void 移动()
{
System.out.println("我在移动");
}
public void 引擎类型() //属于自己(跑车)的行为
{
System.out.println("高级引擎");
}
轮子=4;
}

public class 自行车 extends 车
{
public void 移动()
{
System.out.println("我在移动");
}
public void 爆胎() //属于自己(自行车)的行为
{
System.out.println("我走不动了");
}
轮子=2;
}


2。Interface 则用来定义一个协议,所有的方法都可以实现它。一个Interface定义了方法,和最终静态(final static)变量,所有实现这个Interface的都要保证实现的东西与这个Interface 定义的行为一致。使用Interface可以让Object(对象)在一定的规范下沟通。



public interface TCP协议
{
public void 打开端口();
public void 关闭端口();
}

这样的话,只要实现这个Interface的都可以使用这两个方法交流。

在 Java平台里,它们主要有3个不同点:
1。一个类(Class)只能继承一个超类(Super class),但是可以实现多个Interface。
2。在Abstract Class内,你可以有不抽象(Abstract)的方法,即有意义的方法,但Interface不行。


public abstract class 车
{
public int 轮子;
public abstract void 移动();
public String 我是什么()
{
return "车子";
}
}


3。Interface不属于 继承范围。即不可能成为超类(Super Class)
(完)

这篇文章是根据Sun的FAQ中http://access1.sun.com/FAQSets/newtojavatechfaq.html 的Q13
翻译得来 。

Copied from
http://bbs.chinajavaworld.com/post/view?bid=20&id=120024&sty=1&tpg=1&age=-1


why edited on 2005-11-17 09:47


从Coding Fan到真正的技术专家
作者 Re:<我是新手>请解答一下接口和抽象类的区别好吗?谢谢!! [Re:zoudejian123]
enthusiasm





发贴: 74
积分: 0
于 2005-11-17 17:34 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
gongshi,你好,我对这两个概念也很混淆。

从你字面上的意思来理解,

如果一个子类继承了父类,可以在父类原有的基础上再进行扩展,使其具体化。

如果一个类实现了接口,准确的说是这个类的方法实现了接口,“2。Interface 则用来定义一个协议,所有的方法都可以实现它。”,并且要保证与这个接口的行为一致(无法扩展)。

打个粗略的比方,我实现了一个“手机接口”,你也实现了一个“手机接口”,我们俩就可以利用“手机接口”通信了。我实现了一个“QQ接口”,你也实现了一个“QQ接口”,我们俩就可以利用“QQ接口”来通信。

我这样理解正确吗?麻烦你再帮我解答一下,谢谢。




CJSDNer6月14日北京聚会花絮
作者 Re:<我是新手>请解答一下接口和抽象类的区别好吗?谢谢!! [Re:zoudejian123]
Jcat

熊猫的猫



发贴: 266
积分: 16
于 2005-11-17 18:00 user profilesend a private message to usersend email to Jcatsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
The interface keyword takes the abstract concept one step further. You could think of it as a “pure” abstract class. It allows the creator to establish the form for a class: method names, argument lists, and return types, but no method bodies. An interface can also contain fields, but these are implicitly static and final. An interface provides only a form, but no implementation.
An interface says, “This is what all classes that implement this particular interface will look like.” Thus, any code that uses a particular interface knows what methods might be called for that interface, and that’s all. So the interface is used to establish a “protocol” between classes. (Some object-oriented programming languages have a keyword called protocol to do the same thing.)


上述摘自《Thinking in Java》第八章的开头引言。

深入了解请看:
第5章的“接口与实现”
第7章的“抽象类与抽象方法”
第8章的“接口”


其本质问题,不是一两句说的清的。不过,我有个肤浅的理解:
可以把接口看作是一个特殊的抽象类!
特殊1:接口的域(public-final-static)和方法(public-abstract)的修饰符是固定唯一的
特殊2:接口可以被多重“继承”(我这里当然指的是implement)


Jcat edited on 2005-11-17 18:13

编程,游泳,睡觉--SleepingCat

Hibernate的优点
作者 <>谢谢!! 特此感谢斑竹!! [Re:zoudejian123]
zoudejian123





发贴: 4
积分: 0
于 2005-11-17 20:59 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
谢谢!!!



菜鸟请教,基本程序调试不通,急急急急急急!!!
作者 Re:<我是新手>请解答一下接口和抽象类的区别好吗?谢谢!! [Re:zoudejian123]
Jcat

熊猫的猫



发贴: 266
积分: 16
于 2005-11-17 21:17 user profilesend a private message to usersend email to Jcatsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list


(缩略图,点击图片链接看原图)



编程,游泳,睡觉--SleepingCat

搞笑QQ图片
作者 Re:<我是新手>请解答一下接口和抽象类的区别好吗?谢谢!! [Re:zoudejian123]
wangyabing





发贴: 18
积分: 0
于 2005-12-29 16:50 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
朋友们我也是刚刚入门可以不可以留下你的qq号大家有时间好交流一下
我的qq:253676083 请注明java
这样我会认的




[转帖]面向对象的思维方法

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923