java 抽象类和接口

左手的ㄟ右手 2021-11-05 09:30 828阅读 0赞

什么是抽象类和接口

抽象方法 即使用 abstract 关键字修饰,仅有声明没有方法体的方法。

  1. public abstract void f(); //没有内容

抽象类 即包含抽象方法的类。

如果一个类包含一个或者多个抽象方法,该类必须被限定为抽象的。抽象类可以不包含抽象方法。

  1. public abstract class BaseActivity {
  2. private final String TAG = this.getClass().getSimpleName(); //抽象类可以有成员
  3. void log(String msg){ //抽象类可以有具体方法
  4. System.out.println(msg);
  5. }
  6. // abstract void initView(); //抽象类也可以没有抽象方法
  7. }

接口 是抽象类的一种特殊形式,使用 interface 修饰。

  1. public interface OnClickListener {
  2. void onClick(View v);
  3. }

特点与区别

抽象类的特点

抽象类的初衷是“抽象”,即规定这个类“是什么”,具体的实现暂不确定,是不完整的,因此不允许直接创建实例。

  • 抽象类是由子类具有相同的一类特征抽象而来,也可以说是其基类或者父类
  • 抽象方法必须为 public 或者 protected(因为如果为 private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为 public
  • 抽象类不能用来创建对象
  • 抽象方法必须由子类来实现
  • 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法,如果子类没有实现父类的抽象方法,则必须将子类也定义为抽象类
  • 抽象类还是很有用的重构工具,因为它们使得我们可以很容易地将公共方法沿着继承层次结构向上移动

接口的特点

Java 为了保证数据安全性是不能多继承的,也就是一个类只有一个父类。

但是接口不同,一个类可以同时实现多个接口,不管这些接口之间有没有关系,所以接口弥补了抽象类不能多继承的缺陷。

接口是抽象类的延伸,它可以定义没有方法体的方法,要求实现者去实现。

#

比较:

  • 接口的所有方法访问权限自动被声明为 public
  • 接口中可以定义“成员变量”,会自动变为 public static final 修饰的静态常量
  • 可以通过类命名直接访问:ImplementClass.name
  • 不推荐使用接口创建常量类
  • 实现接口的非抽象类必须实现接口中所有方法,抽象类可以不用全部实现
  • 接口不能创建对象,但可以申明一个接口变量,方便调用
  • 完全解耦,可以编写可复用性更好的代码
  • 这里写图片描述

发表评论

表情:
评论列表 (有 0 条评论,828人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java-接口抽象

    抽象类写法及作用范围 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更通用。 类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽

    相关 Java 抽象接口

    抽象类 一.抽象类的含义 当多个类中出现相同的功能,但是功能主体不一样,这时候可以进行向上抽取,只抽取功能定义,而不抽取功能主题,并将这些功能定义封装进一个类,,

    相关 JAVA抽象接口

    本文是本人学习网络上各位大牛的总结。 一、抽象类 1. 在面向对象领域由于抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的。 2. 抽

    相关 Java抽象接口

    抽象类是一种功能不全的类,接口是一个抽象方法声明和静态不能被修改的数据的集合,两者都不能被实例化。从某种意义上说,接口是一种特殊形式的抽象类,在Java语言中,抽象类表示一种继

    相关 java接口抽象

    1、抽象类最大的特征就是在普通类的基础上追加了抽象方法,而事实上抽象类定义里面也存在有若干的问题 。将抽象方法和普通方法写在一起有些乱 。抽象类本身会存在单继承的局限

    相关 JAVA抽象接口

    抽象类: 定义一个类的时候,常常需要定义一些方法来描述该类的行为特征,但有时候这些方法的实现方式无法确定。 针对这种情况,Java允许在定义方法的时候可以不写方法体,不

    相关 Java抽象接口

    父类定义了子类中的共同行为,接口定义不同类的共同行为。 抽象类 抽象类不可 new 一个实例,可以包含抽象方法,没有实现,这些方法在子类中实现。 使用 abstrac