发布日期:2007.4.6 作者:Anytao

©2007 Anytao.com 转贴请注明出处,留此信息。

本文将介绍以下内容:

• .NET的基础和技巧探讨

• 胡言乱语话技术

王论:

今日话题:《抽象类和接口的异同》

管语:

呵呵!好!

先说一下抽象类:
抽象类是声明方法的存在而不去实现它,这样的类就是抽象类,它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现方法,这和接口一致。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。取而代之,在子类中实现该方法。就是说知道其行为的子类或其他类可以在类中实现这些方法。
在java中,抽象类中可以没有抽象方法
如果一个类中有抽象方法,那么这个类必须定义为抽象类

王论:

我来说接口:
接口在某种程度上和抽象类是一样的,例如都是提供了声明而没有实现,必须由集成的类实现所有定义的接口方法,否则不能编译。
上述你所说的关于Java中抽象类的规则,基本和.NET差不多。

管语:

java中:
接口是抽象类的变体。在接口中,所有方法隐含着都是抽象的。多继承性可通过实现这样的接口而获得。因为接口中的所有方法都是抽象的,所以没有一个有程序体。接口可以定义static final成员变量,我认为这是一个抽象类不同的地方,接口的实现与子类相似,但是这个实现类不能从接口定义中继承行为。这也是和普通类继承机制不同的地方。当类实现特殊接口时,它定义必须所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。instanceof 运算符可以用来决定某对象的类是否实现了接口。

抽象类中,究竟可不可以实现一个方法?我刚才是不是说错了?

王论:

刚才讲了相同点,现在说说不同处:
抽象类:可以包括抽象方法,也可以提供非抽象方法,也就是说,抽象类中可以有实现的方法,这些方法可以提供公共的规则定义。
接口:只能提供没有实现的抽象方法,在接口中,所有的方法都默认为public,因此,接口中不能有private修饰符。
抽象类:只能单继承;
接口:可以多继承。

管语:

其实就是应该多说说他们的不同点

王论:

是啊,另外你刚才说的instanceof操作符号,是用来判断接口类型,还是其他类型都可以判断:
在C#中有一个is操作符是可以判断所有类型的。例如:

 1interface IAnytao
 2{} 
 3
 4class Test
 5{
 6IAnytao tao = new Anytao();
 7if (tao is IAnytao) 
 8{
 9Console.Write("tao is a instance of IAnytao.");
10}
11}
12

管语:

intanceof和is是一个意思!

王论:

另外,C#中还有as操作符,Java中有对应的吗?

管语:

as是干吗的?

王论:

和is差不多,不过更常用,效率更高

管语:

区别:

1、接口可以被多重implements,抽象类只能被单一extends

2、接口只有定义,抽象类可以有定义和实现

3、接口的字段定义默认为:public static final,抽象类字段默认是友元的,就是“friend”(本包可见)

4、抽象类是一个不完整的类,需要进一步细化,而接口是一个行为的规范。

5、接口基本不具备继承的任何基本特点,它只是承诺了能够调用的方法。

6、一个类一次可以实现多个接口,但是只能继承一个父类。

7、接口可以用于支持回调(callback),但是继承不行。用于回调的接口只是提供指向方法的指针,而且是一个类型安全的“指针方式”。

©2007 Anytao.com 转贴请注明出处,留此信息。

本贴子以现状提供且没有任何担保,同时也没有授予任何权利。
This posting is provided "AS IS" with no warranties, and confers no rights.

转载于:https://www.cnblogs.com/anytao/archive/2007/04/06/703061.html

[和管子对话] 2 2007-4-6/抽象类和接口的谁是谁非相关推荐

  1. [和管子对话] 1 2007-4-5/对面向对象的你言我语 (转载)

    [和管子对话] 1 2007-4-5/对面向对象的你言我语 引用:记录和管伟同志在软件开发方面的交流点滴,汇成江河以滋志同道合者. 主人公简介: 管子,又名双眼皮,乃技术通博之人. 王者,.NET的爱 ...

  2. 【转载】 vs2005视频教程 之 抽象类和接口 四 [视频]

    原帖地址:http://www.cnblogs.com/thcjp/archive/2007/04/20/721587.html 首先要感谢 anytao.cnblogs.com ,因为下面总结这部分 ...

  3. 不允许使用抽象类类型的对象怎么办_Java基础——面试官:你来说说抽象类和接口的区别...

    无论你是新手Java 程序员,还是老手程序员,可能在实际开发中很少自己写抽象类. 但是抽象类在某些时候的功能很强大,可以保证子类中百分百实现父类中的方法 -- 普通类的弊端,消除子类的冗余代码 -- ...

  4. php 抽象类 接口 区别,PHP中抽象类、接口的区别与选择分析

    本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过 ...

  5. C#中抽象类和接口的区别

    一.抽象类:       抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆 ...

  6. java中抽象接口_一篇文章让你彻底理解java中抽象类和接口

    相信大家都有这种感觉:抽象类与接口这两者有太多相似的地方,又有太多不同的地方.往往这二者可以让初学者摸不着头脑,无论是在实际编程的时候,还是在面试的时候,抽象类与接口都显得格外重要!希望看完这篇博客文 ...

  7. 类、抽象类、接口之间的区别

    目录 1.类与抽象类的异同之处 (1)类和抽象类的区别 (2)类和抽象类的相同之处 2.接口与类的异同之处 (1)接口与类相似点 (2)接口与类的区别 (3)接口特性 3.抽象类和接口的区别 1.类与 ...

  8. Java 抽象类与接口的区别

    接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样.接口是对动作的抽象,抽象类是对根源的抽象 抽象类表示的是,这个对象是什么.接口表示的是,这个对象能做什么.比如, ...

  9. java 接口工程_Java工程师(15)抽象类与接口

    抽象类 思考下面程序潜在的问题 交通工具中定义了4个方法,其中行驶方法内部会依次调用启动.加速.停止方法.由于不同的交通工具,启动的方式差异很大,所以交通工具类中并不实现该方法,而是将其交给子类实现. ...

最新文章

  1. python笔记3(numpy数组)
  2. 知识图谱实践篇(三):D2RQ SPARQL endpoint与两种交互方式
  3. QT Creater/VS2013的使用(快捷键,调试等)
  4. 【SpringBoot】查看运行环境中所有的spring bean
  5. Codeforce-Ozon Tech Challenge 2020-C. Kuroni and Impossible Calculation(鸽笼原理)
  6. 线性筛素数的实现与证明
  7. java gc 循环引用_JVM(3)对象A和B循环引用,最后会不会不被GC回收?-------关于Java的GC机制...
  8. spring boot redis分布式锁
  9. 如何解决海量数据的处理问题
  10. 阿里云大学:百度贴吧自动签到实现
  11. IDDD 实现领域驱动设计-SOA、REST 和六边形架构
  12. 1分钟学会小程序几个最有效的运营推广手段
  13. 项目管理软件怎么选?看看中国电信天翼云的选择
  14. Unity3D FPS射击游戏
  15. ToolGood.Words一款高性能敏感词(非法词/脏字)检测过滤组件,附带繁体简体互换,支持全角半角互换,汉字转拼音,模糊搜索等功能。
  16. linux 命令行修改mac,Linux下修改MAC地址
  17. 转载:Android Studio 快捷键
  18. 统计手机号耗费的总上行流量、下行流量、总流量(序列化)
  19. 什么是Alpha通道(Alpha Channel)
  20. 黑马程序员——构造器和方法

热门文章

  1. 数据结构之基于Java的链接列表实现
  2. C语言scanf函数详解和示例
  3. css文字不被点击,css 让文字不被选中之-moz-user-select 属性介绍
  4. 通过Server 2019中的组策略部署桌面墙纸 详解组策略环回处理
  5. 混合云备份服务 > 产品简介 > 什么是混合云备份
  6. 云计算架构师分享:容器云在金融企业的落地方案 | 周末送资料(原题:某保险公司容器云PaaS平台建设实践经验分享)
  7. Spring MVC学习总结(1)——Spring MVC单元测试
  8. include引用php,php使用include 和require引入文件的区别
  9. swift 拖动按钮_Swift 简单控件示例:滑块(UISlider)
  10. 什么是python全栈开发_什么是python全栈