Java接口和抽象类的比较

Java接口和抽象类的比较

  首先分别介绍一些两者的概念。

1、抽象类

  用关键字abstract声明的类称为为abstract类(抽象类),例如:

abstract class A{
...
{

  用关键字abstract声明的方法称为为abstract方法(抽象方法),例如:

abstract int min(int x,int y);

  对于abstract只允许声明,不允许实现(没有方法体),而且不允许使用final和abstract同时修饰一个方法或类,也不允许使用satic修饰abstract方法,即abstract方法必须是实例方法。

  1、abstract类中可以有抽象方法,也可以有非抽象方法;

  2、abstract类不能使用new运算符创建该类的对象,如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的抽象方法,给出方法体,这就是为什么不允许使用final修饰抽象类或抽象方法的原因。(用final修饰的类不能被继承,用final修饰的方法不能被子类重写)

  3、如果一个非abstract类是abstract的子类,它必须重写父类的abstract方法,即去掉abstract方法的abstract修饰,并给出方法体。如果一个abstract类是abstract的子类,它可以重写父类的抽象方法,也可以继承父类的抽象方法,即可以不重写。

  4、可以使用abstract类声明对象,尽管不能使用new运算符创建该对象,但该对象可以成为其子类对象的上转型对象,那么该对象就可以调用子类重写的方法。

  5、抽象类可以抽象出重要的行为标准,该行为标准用抽象方法来表示。即抽象类封装了子类必须要有的行为标准。抽象类声明的对象可以成为其子类的上转型对象,调用子类重写的方法,即体现子类根据抽象类里的行为标准给出具体的行为。抽象类中的抽象方法,可以由子类去实现,即行为标准的实现由子类完成

  6、所谓面向抽象编程,是指当设计某种重要的类时,不让该类面向具体的类,而是面向抽象类,即所设计类中的重要数据是抽象类声明的对象,而不是具体类声明的对象。

  抽象类也可以继承抽象类和实现接口,实现接口的话可以不用实现接口的方法

2、接口

  1、使用关键字interface来定义一个接口。接口的定义和类的定义十分相似,分为接口声明和接口体,例如:

interface A{
	final int MAX = 100;
	void add();
	float sum(float x, float y);
{

  2、定义接口包含接口声明和接口体,和类不同的是,定义接口时使用interface来声明自己是一个接口,格式如下:

interface 接口的名字

  3、接口体中包含常量的声明(接口中没有变量)和抽象方法两部分。接口体中只有抽象方法,没有普通的方法,而且接口体中所以常量的访问权限一定都是public的,而且是static常量(允许省略public、static、final修饰符),所有的抽象方法的访问权限一定都是public的(允许胜利public、abstract修饰符),例如:

interface A{
	public static final int MAX = 100; //等价写法:int MAX = 100;
	public abstract void add(); //等价写法:void add();
{

  4、Java不支持多继承,所以一个类只能继承一个父类,但能实现多个接口,例如:

class Dog extends Animal implements Eatable,SleepAble

  5、如果父类实现了某个接口,那么子类也就自然实现了改接口,子类不用显示的使用关键字implements声明实现该接口。

  6、接口也可以被继承,即可以通过关键字extend声明一个接口是另外一个接口的子接口,由于接口中的方法和常量都是public的,子接口将继承父接口中的全部方法和常量。

  7、通过import语句不仅可以引入包中的类,也可以引入包中的接口,例如:

import java.io.*;

  8、程序可以用接口名访问接口中的常量(接口名.常量),但是如果一个类实现了接口,那么该类可以直接通过该常量的名字在类体中使用该接口中的常量。

3、接口和抽象类的比较

  1、抽象类和接口都可以有abstract方法。

  2、接口中只可以有常量,不能有变量;而抽象类中既可以有常量,也可以有变量。

  3、抽象类中也可以有非抽象方法,接口不可以。

  在设计程序时应当根据具体的分析来确定是使用抽象类还是接口。如果某个问题不需要继承,只是需要若干个类给出某些重要的抽象方法的实现细节,就可以考虑使用接口。

posted @ 2022-05-04 13:03  爱吃雪糕的小布丁  阅读(1)  评论(0编辑  收藏  举报  来源