JAVA抽象类和接口异同点

JAVA抽象类和接口异同点,第1张

JAVA抽象类和接口异同点 一、抽象类 1.定义

在继承的层次结构中,每个新子类都使类变得越来越明确和具体。如果从一个子类追溯到父类,类就会变得更通用、更加不明确。类的设计应该确保父类包括它的子类的共同特征。有时候,一个父类设计得非常抽象,以至于它没有任何具体的实例。这样的类称为抽象类。(只有声明,没有具体的实现方法

2.声明格式
abstract class ClassName {
    abstract void fun();     
}
3.抽象类的说明
  • 抽象类不能包含在非抽象类中;
  • 抽象类是不能使用new *** 作符来初始化的;
  • 包含抽象方法的类必须是抽象的(但是可以定义一个不包含抽象方法的抽象类);
  • 子类可以覆盖父类的方法并将它定义为abstract;
  • 及时子类的父类是具体的,这个子类也可以是抽象的;
  • 不能使用new *** 作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型。
4.抽象类补充细节
  • 抽象类中有构造函数,用于给子类对象积极性初始化;
  • 抽象类中可以定义非抽象方法;
  • 抽象关键字abstract和private、static、final关键字不能共存;
  • 抽象类可以定义抽象方法(不定义抽象方法的目的是不让抽象类创建对象);
  • 抽象类一定是父类,因为需要杯子列覆盖其所有的抽象方法才能使用。
二、接口 为什么会出现接口?

当一个抽象类中,所有的方法都是抽象方法时,这时可以将该抽象类用另一种形式定义和表示,就引入了接口的概念。

1.定义

接口(interface)是一种与类相似的结构,只包含常量和抽象方法。接口在许多方面都与抽象类很相似,但是它的目的是指明相关或者不相关类的多个对象的共同行为,在Java中接口被看作是一种特殊的类。

注意:接口中的成员都有固定的修饰符;成员变量: public static final;成员方法: public abstract 。

2.声明格式
abstract class ClassName {
    abstract void fun();          
}
3.特点
  • 接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误)。
  • 方法会被隐式地指定为public abstract方法且只能是public abstract方法。
  • 接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。
三、抽象类与接口共同点

抽象类:一般用于描述一个体系单元,将一组共性内容进行抽取。特点:可以在类中定义抽象内容让子类实现,可以定义非抽象内容让子类直接使用。它里面定义的都是一些体系中的基本内容。

接口:一般用于定义对象的扩展功能,是在继承之外还需这个对象具备的一些功能。

抽象类和接口的共同点:

  • 都是不断向上抽取的结果;
  • 都可以定义一种类型;
  • 都用来明确多个对象的共同特征。
四、抽象类与接口的区别
  • 一个类可以实现多个接口,但是只能继承一个父类。

变量

构造方法

方法

抽象类

无限制

子类通过构造方法链调用构造方法,抽象类不能用new *** 作符实例化

无限制

接口

所有变量必须都是public、static、final

没有构造方法。接口不能用new *** 作符实例化

所有方法必须是公共的抽象实例方法。可以包含都不理睬的抽象实例方法、public的默认方法以及public的静态方法

  • Java只允许类的扩展做单一继承,但允许使用接口做多重扩展。例如,

public class NewClass extends baseClass
    Implements Interfacel,...,InterfaceN{
...
} 

 利用关键字extends,接口可以继承其他接口。这样的接口称为子接口(subinterface)。例如,在下面的代码中,NewInterface是Interface1,...,InterfaceN的子接口。

public interface NewInterface extands Interface1,...,InterfaceN{
//constants and abstract menthods
}

 一个实现NewInterface的类必须实现在NewInterface,Interface1,...,InterfaceN中定义的抽象方法。接口可以扩展其他接口而不是类。一个类可以扩展它的父类同时实现多个接口。

  • 所有类共享同一个根类Object,但接口没有共同根。
  • 类名是一个名词。接口名可以是形容词或名词。
  • 接口可以定义非相关类共有的父类型。接口比类更加灵活。
  • 抽象类只能被继承,而且只能单继承。接口需要被实现,而且可以多实现。
  • 抽象类中可以定义非抽象方法,子类可以直接继承使用。接口中都有抽象方法,需要子类去实现。
  • 抽象类使用的是 is a 关系。接口使用的 like a 关系。
  • 抽象类的成员修饰符可以自定义。接口中的成员修饰符是固定的。全都是public的。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5660075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存