`
luffyke
  • 浏览: 9788 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

JAVA基础系列(1)—— 抽象类和接口

阅读更多
1.接口(interface),接口被用来建立类与类之间关联的标准。

Java code
 
public interface ITest{ 
       public void test(); 
} 
public class TestImpl implements ITest{ 
       public void test(){ 
             System.out.println("test"); 
       } 
}



2.抽象类(abstract class),只要类中有一个抽象方法,此类就被标记为抽象类。实际上抽象类除了被继承之外没有任何意义。

区别
1.
接口是公开(public)的,里面不能有私有的方法或变量,是用于让别人使用的,实现接口的一定要实现接口里定义的所有方法。
而抽象类是可以有私有方法或私有变量的,实现抽象类可以有选择地重写需要用到的方法,但是必须实现里面所有的抽象方法。
2.
抽象类在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。
但是,一个类却可以实现多个interface(java中实现多重继承的方法之一)。
3.
抽象类中可以有自己的数据成员,也可以有非abstarct的成员方法。
而在接口中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),而且所有的成员方法都是抽象的。
4.
抽象类和接口所反映出的设计理念不同。
其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。(组合是"has a"关系)
5.
接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。不是很建议具体类直接实现接口的。还有一种设计模式是面向接口编程,而非面向实现编程。

其实接口是抽象类的延伸,可以将它看做是纯粹的抽象类,就是说接口比抽象类还抽象,还有设计接口的目的就是为了实现C++中的多重继承,不过java团队设计的一样更有趣的东西来实现这个功能,那就是内部类(inner class),下一个系列中讲会详细讲解内部类的作用。

Thinking in java里面的内容,有一个很好的例子来诠释究竟什么时候应用抽象类,什么时候应用接口,那就是广泛流传的报警门例子,思考后得到的理解就是上面所说的:抽象类,"is a"关系,抽象出共同的本质特征,单一继承;接口,"like a"关系,个性化特征,多重继承。

不同的门都具有本质特征动作 open(), close()。那么抽象类和接口都可以定义这两个方法。现在要求它具有报警alarm功能。
1) 如果这3个功能都放在抽象类里面,那么所有的门都具备了这3个功能,无疑不妥,有的门不需要报警功能啊!
2) 如果这3个功能都放到接口里面,需要用到报警功能的其他类,就需要实现门的open和close功能,这样子也不对!

所以,应该把门的open, close和alarm分离,让所有的门都有open, close动作,继承抽象类Door。而需要添加报警功能的门,则再继承接口Alarm。
abstract class Door { 
  abstract void open(); 
  abstract void close(); 
} 
 
interface Alarm { 
  void alarm(); 
} 
 
class AlarmDoor extends Door implements Alarm { 
  void open() { … } 
  void close() { … } 
  void alarm() { … } 
} 

可以看出,因为抽象类是用于单一继承,接口是用于多重继承,所以需要这样安排。而同时看到,抽象类就是类的本质特征,共同的;接口是个性化的,你想让类更具个性化,则继承其他相应个性特征的接口。


分享到:
评论
2 楼 luffyke 2009-11-28  
呵呵,我只是想说接口就是来定义它能做什么!
1 楼 RednaxelaFX 2009-11-22  
luffyke 写道
微软的自定义接口总是后带able字段,证明其是表述一类类“我能做。。。”

话说IEnumerable<T>是接口,IList<T>也是接口,但后者就没有-able  XDD

相关推荐

    java基础——————试题库

    这份“java基础——————试题库”资源旨在帮助学习者系统地复习和深入理解Java的基础知识,确保他们能够全方位地掌握这一强大的编程工具。下面将详细阐述Java的基础知识点。 1. **Java简介** - Java是由Sun ...

    实验抽象类和接口.doc

    实验“抽象类和接口”旨在深入理解Java编程中两种重要的多态实现机制——抽象类和接口。本实验涉及以下几个核心知识点: 1. **抽象类**: - **定义**:抽象类是一种不能被实例化的类,它用于为其他类提供公共的...

    简述抽象类和接口的区别-java接口和抽象类异同.docx

    总体而言,抽象类和接口都是面向对象编程中非常重要的概念,它们各自适用于不同的场景。理解它们的特点并合理地选择使用,可以帮助开发者更好地组织代码,提高程序的可维护性和扩展性。在实际开发过程中,应根据具体...

    博客资源-《java基础——接口》

    在本文中,我们将深入探讨Java接口的基础知识,包括接口的定义、使用、接口与抽象类的区别以及接口中的默认方法等核心知识点。 首先,接口在Java中是一个完全抽象的类型,它只包含常量定义和抽象方法声明,不包含...

    JAVA学习笔记————————

    1. **JAVA基础**:这部分包括JAVA语法的基础知识,如数据类型(基本类型与引用类型)、变量、运算符、流程控制(条件语句、循环语句)、方法的定义和调用等。此外,还会涉及类和对象的概念,这是面向对象编程的核心...

    08丨理论五:接口vs抽象类的区别?如何用普通的类模拟抽象类和接口?1

    在面向对象编程中,抽象类和接口是两个关键的语法构造,它们在实现面向对象的四大特性——封装、继承、多态和抽象——以及许多设计模式、设计思想和设计原则中起到至关重要的作用。接口主要用来实现抽象和多态性,...

    Java语言程序设计——基础篇

    - **继承与多态**:继承的概念及实现方式,抽象类与接口的区别,多态性的实现机制。 - **封装、继承、多态**:三大特性在实际编程中的应用实例。 ### 4. 常用API介绍 - **集合框架**:List、Set、Map等集合类的...

    JAVA开发与应用抽象类与接口及多态PPT教案学习.pptx

    JAVA开发与应用抽象类与接口及多态PPT教案学习 abstract类和抽象方法是Java编程语言中两个重要的概念。抽象类是指在类中没有方法体的方法,即抽象方法。抽象类是指含有抽象方法的类。如果一个子类没有实现抽象基类...

    Java实验报告——类的继承、多态的应用

    总结来说,这个实验报告通过实际编程练习,帮助我们巩固了Java中抽象类和抽象方法的定义,以及类的继承和多态性这两个核心概念。通过设计和实现学生管理类,我们可以更深入地理解这些概念在实际问题解决中的应用。

    mwt——java界面开源接口

    MWT的目标是替代Java AWT(抽象窗口工具包)和Swing,这两个传统的Java界面库在某些情况下可能显得过时或性能不足。 MWT的主要特点包括: 1. **轻量级**:MWT设计时考虑了效率,因此它的内存占用和CPU使用率相对较...

    Java基础知识——Java入门与加深

    接口在Java中扮演着重要的角色,它是一组抽象方法的集合,可以被类实现。接口有助于实现多继承,并促进代码的模块化。 此外,Java集合框架是处理对象集合的重要工具,包括List(如ArrayList、LinkedList)、Set(如...

    java课件——全面介绍java知识

    此外,了解抽象类和接口的区别也很重要。在Java中,接口提供了一种强制实现的方式,而抽象类则可以包含已实现的方法。 集合框架是Java中处理数据集合的重要工具,包括List、Set、Queue和Map等接口,以及ArrayList、...

    深入剖析Java抽象类与接口的神秘力量 - 探索编程世界的双极法则

    通过以上章节的介绍,我们可以看出,Java中的抽象类和接口各有其独特的优势。抽象类更适用于定义一组具有相似属性和行为的类的公共基础,而接口则更适合于定义一组特定行为的规范。合理运用这两种工具,可以使我们的...

    java——基础商城小项目 包含面向对象 多态 接口

    【标题】"java——基础商城小项目 包含面向对象 多态 接口" 提供了关于这个Java项目的三个核心概念:面向对象编程、多态性和接口。这些是Java编程语言中的基本但至关重要的特性。 面向对象编程(Object-Oriented ...

    java实例——闹钟——看看吧 总有思路的

    而`java.util.TimerTask`是需要被调度执行的任务,它是一个抽象类,需要我们继承并重写其`run()`方法来定义具体的执行逻辑。 在"实例1 闹钟"的代码中,我们可能会看到以下关键步骤: 1. **创建Timer对象**:首先,...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

     abstract 说明一个类为抽象类,抽象类是指不能直接实例化对象的类。  final 说明一个类为最终类,即改类不能再有子类。  public 说明类为公共类,该类可以被当前包以外的类和对象使用。  private 说明类为...

    完整版优质java课件 Java基础入门教程 Java编程技术14 补充--对多态、抽象和接口的理解(共24页).ppt

    【Java编程技术——多态、抽象和接口的理解】 在Java编程中,多态性、抽象和接口是面向对象编程的三大核心概念,它们为代码的灵活性、可扩展性和复用性提供了基础。以下是对这些概念的详细解释: 1. **多态性...

Global site tag (gtag.js) - Google Analytics