这段时间学习Java类库源码,发现自己对于Java的一些基本特性掌握的不是很好,例如接口与抽象类的一些特性,所以重新翻看《Core Java》,将两者的相关内容整理一下。
转载请注明出处。
————————————————————————————————————————————
————————————————————————————————————————————
Java中的接口和抽象类都是抽象机制的实现,两者有许多共同点,也有一些不同点,要注意区分。
抽象类
在继承结构中,上层的类比下层的类更具有通用性,更加抽象。有些时候,我们只想把上层类作为派生其他类的基类,而不作为特定的实例类,这时候抽象类就派上用场了。如果类中的一个方法用abstract 关键字修饰,则不需要实现这个方法,而是把实现留给继承它的类。例如:
public abstract class AbstractPerson {
public abstract String getDescription();
}
必须注意,出了抽象方法之外,抽象类还可以包含其他具体数据和具体方法(提供实现)。如下:
package cd.edu.hfut.comparable;
/**
* @author bingduanLin
*
*/
public abstract class AbstractPerson {
public abstract String getDescription();
/**
* @return
*/
public String getName() {
return this.name;
}
private String name;
}
如果一个类含有抽象方法,则类本身也必须声明为抽象的。抽象类不能被实例化,但是可以声明一个抽象类的对象变量,这个对象变量只能引用抽象子类的对象。例如,Employee类继承自Person,则可以如下声明:
Person person = new Employee()
在子类中,可以实现部分或者全部抽象方法。如果实现部分抽象方法,则子类仍然是抽象类。如果所有方法都被实现,则子类不再是抽象类。另外,即使不含抽象方法,也可以将某个类声明为抽象类。
现在如果有一个类继承了Person,如下:
class Employee extends AbstractPerson {
@Override
public String getDescription() {
return this.des;
}
String des;
}
现在,上面的person对象变量可以调用p.getDescription方法了,而且结果也将返回des。这里需要解释一下,由于抽象类不能被实例化,所以person引用的永远不可能是Person对象,也就是说,只能引用具体的子类,而这些子类中都实现了getDescription方法,当然就可以调用啦。
在java集合框架中,有许多抽象类,例如 AbstractCollection, AbstractSet, AbstractList等等。可以查看源码了解更多。
接口
Java中的接口,是对类的一组需求描述,遵循接口的统一格式。
在接口中,只能提供方法的声明,而不能实现方法的具体细节。所有方法自动声明为public,所以可以不提供关键字public,但是标准库中有些接口还是加上public,例如Comparable接口中的compareTo方法。在实现接口时,必须声明为public。
出了方法声明之外,接口中还可以定义常量。常量自动被声明为public static final,所以可以省略这一些,一样的,可以加上去使代码更加清晰。标准库中的SwingConstant接口中只包含诸如North之类的常量而没有方法声明,于是实现这一接口的类就可以直接引用这些常量。
需要特别注意的是,在接口中不能有实例域或者静态方法(静态一般都跟类相关,而跟接口无关),也不能有方法实现。
跟抽象类一样,不能实例化接口,但是可以声明接口的对象变量,然后将实现接口的类对象赋值给他。例如:
List<String> strings = new ArrayList<String>();
可以使用instanceof检查某个对象是否属于一个类,也可以检查一个对象是否实现类某个接口,例如
if (anObjecy instanceof Comparable)
接口跟抽象类最大的区别除了抽象类可以含有实例域和实例方法(而接口不行)以外,Java中只能使用单继承,但是却可以实现多个接口,这是很重要的一个特性。
分享到:
相关推荐
Java接口与抽象类的课件,适合初学者,主要对接口与抽象类进行简要介绍,PPT版本。
11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别....
10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和...
Java 接口和抽象类 Java 编程语言提供了两种机制来实现面向对象编程的多态性:接口和抽象类。这两种机制使得 Java 应用开发具有灵活性和敏捷性。 抽象类 抽象类是一种特殊的类,它不能被实例化,不能被直接使用,...
### Java接口与抽象类的区别 在Java编程语言中,接口(Interface)与抽象类(Abstract Class)都是用于实现抽象和多态的重要工具。它们都允许我们定义行为的标准,但它们的使用场景、特点以及语法存在一定的差异。...
本文将深入探讨Java接口与抽象类的概念及其应用场景,并通过实例帮助读者理解它们各自的优势及适用场合。 #### 二、Java接口 Java接口是一种完全抽象的类,它只包含常量和抽象方法的声明,不允许有具体的实现代码...
java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例...
4. 绑定关系:抽象类与子类有从属绑定,接口与实现类之间没有这种绑定。 5. 动态绑定:两者都支持运行时多态,即父类引用指向子类对象。 在使用原则方面: 1. 抽象类:通常用于一组相关子类共享代码,减少代码冗余...
在Java编程语言中,接口(Interface)和抽象类(Abstract Class)都是用于实现多态性的关键...通过阅读"java中接口与抽象类的详细分析与比较.doc"文档,你将获得更深入的洞察和实践指导,进一步提升你的Java编程能力。
### Java利用接口和抽象类改写求圆的面积和梯形的面积 #### 深入理解Java的接口和抽象类 在Java编程语言中,接口(Interface)和抽象类(Abstract Class)都是用于实现多态性和代码复用的重要概念。它们都无法被...
#### 抽象类与接口的基本概念 1. **抽象类**:抽象类是一种不能被实例化的类,它可以包含抽象方法(没有实现的方法)和具体方法(有实现的方法)。抽象类的主要目的是为子类提供一种共有的基本结构,子类必须实现...
Java抽象类与接口实验报告
在Java编程语言中,抽象类和接口是两种重要的面向对象设计...通过这样的练习,你可以更好地理解和掌握Java中的抽象类与接口,以及它们在实际开发中的应用。在实践中不断尝试和调试,将有助于深化对这两个概念的理解。
理解抽象类与接口的区别并恰当运用,有助于提升代码的可扩展性和可维护性,使得软件设计更加灵活和面向对象。在进行Java编程时,应根据项目需求和设计原则,合理选择抽象类或接口来实现特定功能,以达到最佳的设计...
在Java语言中,abstract class和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,...
1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结
### Java抽象类与接口的区别 #### 一、引言 在Java编程中,抽象类(Abstract Class)与接口(Interface)都是实现抽象的关键工具。它们各自有着独特的优势和适用场景,掌握这两者的区别有助于开发者更好地设计系统...
#### 四、抽象类与接口的区别 1. **继承数量的不同**: - 抽象类:一个类只能继承一个抽象类。 - 接口:一个类可以实现多个接口。 2. **方法实现的不同**: - 抽象类:可以有抽象方法和具体方法。 - 接口:...