一.什么是抽象类
  1. 简单理解的来说就是不够具体的类,具体的反义词—抽象.
  2. 比如说一个图形,这就不够具体,一个图形可以具体的细分为三角形,圆形,长方形等等,三角形又可以更加具体,等腰三角形,等边三角形等等 .而抽象类就是将明显具有自己独特特征的具体类模糊化,将大家都有的共同特征抽象出来,比如说医生类,护士类,士兵类,可以通通抽象为—人类.他们都拥有人类的特征,比如说吃饭,睡觉,娱乐之类的,这些执行的方法都是相似的代码,用抽象类抽象出来,再通过子类继承实现就可以大大减少代码量(偷懒+_+).
  3. 抽象类也是普通类前加上了abstarct关键字,同样,一个普通方法前加上了这个关键字也就成为了抽象方法.

二.如何使用抽象类
  1. 不能直接创建(new)抽象类对象
  2. 必须用一个子类来继承抽象类
  3. 子类必须覆盖重写抽象父类中的所有抽象方法,否则会编译报错,除非该子类也是抽象类
    覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后然后方法体大括号
  4. 创建子类进行使用

注意:

  1. 抽象类中,可以有构造方法(有默认的super()),是供子类创建对象时,初始化父类成员使用的
  2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类

三.接口

1. 什么是接口
接口就像是一种公共规范标准,如同国标,众多工厂其实互相不认识,不联系,但造出来的东西就是能够一起使用.比如也像一个USB接口,U盘,充电宝,随身小风扇都有这个借口,U盘可以插在苹果电脑上,也可以插在DELL电脑上,因为大家共同遵守着一种规范标准.

接口是一种引用数据类型,最重要的内容就是其中的:抽象方法。
如何定义一个接口的格式:

public interface 接口名称
{// 接口内容
}

注意:换成了关键字interface之后,编译生成的字节码文件仍然是:.java --> .class。

2. 如何使用接口

如果是Java 7,那么接口中可以包含的内容有:

  1. 常量
  2. 抽象方法

如果是Java 8,还可以额外包含有:

  1. 默认方法
  2. 静态方法

如果是Java 9,还可以额外包含有:

  1. 私有方法

接口使用步骤:

  1. 接口不能直接使用,必须有一个“实现类”来“实现”该接口。
    格式:
public class 实现类名称 implements 接口名称{// ...
}
  1. 接口的实现类必须覆盖重写(实现)接口中所有的抽象方法。
    实现:去掉abstract关键字,加上方法体大括号。
  2. 创建实现类的对象,进行使用。

接口中的常量
注意:

  1. 接口当中的常量,可以省略 public static final, 不写也默认是这样
  2. 接口当中的常量必须进行复制,不能不赋值
  3. 接口中常量使用完全大写字母,用下划线进行分割(推荐命名规则

接口中的抽象方法
注意

  • 如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就必须是抽象类。

在任何Java版本中,接口都能定义抽象方法
格式:
public abstract 返回值类型 方法名称(参数列表)

注意:

  1. 接口当中的抽象方法,修饰符必须是两个固定的关键字: public abstract
  2. 这两个关键字修饰符,可以选择性省略
  3. 方法的三要素:返回值类型,方法名称,参数列表 可以根据业务情况随意定义
  4. 如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。
  5. 如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。

接口中的默认方法
从Java 8开始,接口里允许定义默认方法。
格式:

public default 返回值类型 方法名称(参数列表)
{方法体
}

接口当中的默认方法,可以解决接口升级的问题

public interface MyInterfaceDefault
{// 抽象方法public abstract void methodAbs();// 新添加了一个抽象方法// public abstract void methodAbs2();// 新添加的方法,改成默认方法public default void methodDefault() {System.out.println("这是新添加的默认方法");}}

注意

  1. 如果实现类所实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
  2. 一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法

接口中的静态方法
接口当中定义静态方法
格式:
public static 返回值类型 方法名称(参数列表){}

注意:

  1. 不能通过接口实现类的对象来调用接口当中的静态方法
    正确用法:通过接口名称,直接调用其中的静态方法

  2. 接口是没有静态代码块或者构造方法的。

  3. 一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。
    格式:

public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB{// 覆盖重写所有抽象方法
}

格式:
接口名称.静态方法名(参数);

public interface MyInterfaceAbstract //接口
{public static final int num = 10;////这是一个抽象方法public abstract void method1();//下面的都是抽象方法public  void method2();abstract void method3();void method4();public default void method05(){System.out.println("我是在接口里新添加的默认方法");}public static void staticMethod(){System.out.println("我是接口里的静态方法");}
}
public class MyInterfaceAbstractImpl implements MyInterfaceAbstract
{    //用一个实现类继承接口@Overridepublic void method1(){System.out.println("这是第一个抽象方法");}@Overridepublic void method2(){System.out.println("这是第2个抽象方法");}@Overridepublic void method3(){System.out.println("这是第3个抽象方法");}@Overridepublic void method4(){System.out.println("这是第4个抽象方法");}}
public static void main(String[] args) //主方法{MyInterfaceAbstractImpl im = new MyInterfaceAbstractImpl();im.method1();im.method2();im.method05();//接口里新添加的默认方法im.method3();//通过接口名称来调用静态方法MyInterfaceAbstract.staticMethod();}


接口中的私有方法

  1. 普通私有方法,解决多个默认方法之间重复的代码问题
    格式:
    private 返回值类型 方法名称(参数列表)
  2. 静态私有方法 解决多个静态方法之间重复代码的问题
    private static 返回值类型 方法名称(参数列表)

四.接口小结

接口内容小结:
在Java 9+版本中,接口的内容可以有:

  1. 成员变量其实是常量,格式:
    public static final 数据类型 常量名称 = 数据值;
    注意:
    常量必须进行赋值,而且一旦赋值不能改变。
    常量名称完全大写,用下划线进行分隔。

  2. 接口中最重要的就是抽象方法,格式:
    public abstract 返回值类型 方法名称(参数列表);
    注意:
    实现类必须覆盖重写接口所有的抽象方法,除非实现类是抽象类。

  3. 从Java 8开始,接口里允许定义默认方法,格式:
    public default 返回值类型 方法名称(参数列表) { 方法体 }
    注意:
    默认方法也可以被覆盖重写

  4. 从Java 8开始,接口里允许定义静态方法,格式:
    public static 返回值类型 方法名称(参数列表) { 方法体 }
    注意:
    应该通过接口名称进行调用,不能通过实现类对象调用接口静态方法

  5. 从Java 9开始,接口里允许定义私有方法,格式:
    普通私有方法:private 返回值类型 方法名称(参数列表) { 方法体 }
    静态私有方法:private static 返回值类型 方法名称(参数列表) { 方法体 }
    注意:
    private的方法只有接口自己才能调用,不能被实现类或别人使用。

  6. 抽象类可以有构造方法,接口中不能有构造方法

  7. 抽象类可以有普通成员变量,接口中没有普通成员变量.

  8. 类与抽象类之间是单继承的,直接父类只有一个。

  9. 类与接口之间是多实现的。一个类可以实现多个接口。

  10. 接口与接口之间是多继承的。

  11. 多个父接口当中的抽象方法如果重复,没关系。

  12. 多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写,(要带着default关键字)

抽象类与接口区别图

Java 笔记-抽象类,接口相关推荐

  1. java中抽象类 接口_java中的抽象类与接口

    1.抽象类的定义 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 2.简单实例 ...

  2. 【java笔记】接口的定义,接口的使用

    java不支持多继承性,即一个类只能有一个父类.(单继承性) 为了解决单继承的缺点,java使用了接口 接口是一种引用数据类型,最重要的内容是抽象方法 (public) interface 接口名称{ ...

  3. 0514课堂笔记--抽象类-接口

    1. 抽象类 1.1 概念 Java中可以定义被abstract关键字修饰的方法,这种方法只有声明,没有方法体,叫做抽象方法. Java中可以定义被abstract关键字修饰的类,被abstract关 ...

  4. 【Java】抽象类接口

    目录 1.抽象类 2.接口 2.1实现多个接口 2.2接口之间的关系 2.3接口使用实例 2.3.1Comparable接口 2.3.2Comparator接口 2.3.2Clone接口 2.4抽象类 ...

  5. java中 抽象类+接口

    用法: 在abstract class方式中,类可以有自己的数据成员,也可以有非 abstract的成员方法,而在interface方式的实现中,类只能够有静态的不能被修改的数据成员(也就是必须是st ...

  6. 10-01 Java 类,抽象类,接口的综合小练习--运动员和教练

    运动员和教练的案例分析 运动运和教练的案例 代码实现 /*教练和运动员案例乒乓球运动员和篮球运动员.乒乓球教练和篮球教练.为了出国交流,跟乒乓球相关的人员都需要学习英语.请用所学知识:分析,这个案例中 ...

  7. java 类 抽象类 接口_Java抽象类和接口

    抽象类和接口 一.抽象类和抽象方法 对于抽象类,首先需要介绍抽象方法,而抽象类因抽象方法的存在而存在 1.抽象方法 (1)必要性: 有些父类方法不确定如何写方法体,但是对于继承它的子类又必须用到这个方 ...

  8. 我的JAVA笔记--抽象类

    抽象类 抽象类的主要作用在于对子类中覆写方法进行约定,在抽象类里定义一些抽象方法,抽象方法是使用了abstract关键字并且未提供方法体的方法,抽象方法所在的类必须为抽象类(也可能是接口,但接口中所有 ...

  9. Java之抽象类接口

    文章目录 写在前面 抽象类 抽象类的特点 接口 接口的特点 写在前面 我们要来学习一些更加抽象的东西了,我们学习了多态,知道了什么是动态绑定,不过这还不够,我们一起来看看抽象类,同时我们一起学习什么是 ...

最新文章

  1. Web Service (二) CXF自动发布Web Service(No Spring)
  2. 大型网站技术架构(四)网站的高性能架构
  3. java string输入_怎么让Java获取用户输入的字符串
  4. Java SE 知识点
  5. ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
  6. 开启sql server2008的1433端口
  7. 光盘安装linux16.04,cobbler安装ubuntu 16.04巨慢
  8. mysql自带压测工具--mysqlslap
  9. python 异常 模块 包
  10. 蓝桥杯 ALGO-120 算法训练 学做菜
  11. python语法31[变量的作用域+global]
  12. Scratch妙笔生花
  13. 一位仁兄对于项目管理的精辟见解
  14. 你写的api接口代码真是_有哪些好玩的免费的API接口?
  15. 干货!____UI设计中那些创意的图标怎么做
  16. unity 创建自己的像素地图 TileMap
  17. 福建计算机等级考试停考,惊闻|福建省要停考计算机等级考试?!
  18. 树莓派Pico C/C++语言开发
  19. 工作中的纠结——区分于底层OR界面
  20. 【2020HBU天梯赛训练】7-17 PTA使我精神焕发

热门文章

  1. uniapp引入openLayers天地图
  2. 【编码】数据库编码报错
  3. idea 将分支代码合并到另一分支上
  4. 南京建邺、秦淮等7个区公布校外培训机构白名单
  5. python 实现单链表 Lined List
  6. 动态IP与静态ip的区别是什么
  7. 思维导图 基础篇(18)TBLI 考试内容 评分标准
  8. Tushare数据获取(python)
  9. http报文格式、GET与POST的区别
  10. 一荣俱荣,豪取多项冠军后荣耀着手年终奖改革