• 抽象类和接口


    目录

    • 一、抽象类

    • 1.语法规则
    • 2.抽象类的特性
    • 3.作用
    • 二、接口

    • 1.语法规则
    • 2.接口的使用
    • 3.接口特性
    • 4.实现多个接口
    • 5.接口间的继承
    • 三、抽象类和接口的区别

    • 总结


    一、抽象类

    1.语法规则

    Java 中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用 给出具体的实现体。
    1. // 抽象类:被abstract修饰的类
    2. public abstract class Shape {
    3. // 抽象方法:被abstract修饰的方法,没有方法体
    4. abstract public void draw();
    5. abstract void calcArea();
    6. // 抽象类也是类,也可以增加普通方法和属性
    7. public double getArea(){
    8. return area;
    9. }
    10. protected double area; // 面积
    11. }
    注意:抽象类也是类,内部可以包含普通方法和属性,甚至构造方法

    2.抽象类的特性

    1. 抽象类不能直接实例化对象,否则会编译出错。
    2. 抽象方法不能是 private 的,因为抽象类是需要被继承的,所以不能设置为私有的。 如果抽象方法没有加访问限定符时,默认是public.
    3.  抽象方法不能被 final static 修饰,因为抽象方法要被子类重写。
    4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰。
    5. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类。
    6. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量。

    3.作用

    抽象类本身不能被实例化 , 要想使用 , 只能创建该抽象类的子类 . 然后让子类重写抽象类中的抽象方法 . 但是 普通的类也可以被继承呀, 普通的方法也可以被重写呀, 为啥非得用抽象类和抽象方法
    呢?
    使用普通类也能够做到,但是使用抽象类相当于 多了一重编译器的校验

    二、接口

    1.语法规则

    接口的定义格式与定义类的格式基本相同,将class关键字换成 interface 关键字,就定义了一个接口。

    1. public interface 接口名称{
    2. // 抽象方法
    3. public abstract void A(); // public abstract 是固定搭配,可以不写
    4. public void B();
    5. abstract void C();
    6. void D();
    7. // 注意:在接口中上述写法都是抽象方法,推荐方式4( void D();),代码更简洁
    8. }

    2.接口的使用

    接口不能直接使用,必须要有一个"实现类""实现"该接口,实现接口中的所有抽象方法。子类和父类之间是extends 继承关系,类与接口之间是 implements 实现关系。

    3.接口特性

    1. 接口不能实例化。

    2. 接口中每一个方法都是 public 的抽象方法 , 即接口中的方法会被隐式的指定为 public abstract (只能是public abstract,其他修饰符都会报错 )。
    3. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现
    4. 重写接口中方法时,不能使用 default 访问权限修饰,因为接口默认是public,子类重写时,子类的访问权限要大于等于父类的权限。
    5. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量。
    6. 接口中不能有静态代码块和构造方法。
    7. 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是 .class。
    8. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类。
    9. jdk8 中:接口中还可以包含 default 方法。

    4.实现多个接口

    Java 中,类和类之间是单继承的,一个类只能有一个父类,即 Java 中不支持多继承 ,但是 一个
    类可以实现多个接 一个类实现多个接口时,每个接口中的抽象方法都要实现,否则类必须设置
    为抽象类

    5.接口间的继承

    Java 中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。即:
    用接口可以达到多继承的目的。接口可以继承一个接口, 达到复用的效果 . 使用 extends 关键字。
    接口间的继承相当于把多个接口合并在一起。
    1. interface A extends A1, A2, A3 {
    2. }

    三、抽象类和接口的区别 

     抽象类和接口都是 Java 中多态的常见使用方式。

    抽象类中可以包含普通方法和普通字段 , 这样的普通方法和字段可以被子类直接使用 ( 不必重写 ), 接口中不能包含普通方法, 子类必须重写所有的抽象方法。


    总结

    抽象类:

    1.抽象类使用abstract修饰。

    2.抽象类中可以包含普通类中所包含的成员。

    3.抽象类与普通类不一样的是,抽象类可以包含抽象方法。

    4.抽象方法使用abstract修饰,抽象方法可以没有具体的实现。

    5.不能实例化抽象类。

    6.抽象类存在的意义就是为了被继承。

    7.如果一个普通类继承了一个抽象类,那么普通类就必须重写抽象类当中的方法。

    8.如果一个抽象类A继承了一个抽象类B,此时A当中不需要重写B当中的抽象方法,但是如果A再被普通类继承,就需要重写。

    9.抽象方法不能是私有的,要满足重写的规则。

    10.抽象类当中可以有构造方法,是为了方便子类能够调用,来初始化抽象类中的成员。

    接口:

    1.使用interface来修饰接口。

    2.接口当中的成员方法不能有具体的实现:默认是public abstract 的方法;JDK8开始,允许有可以实现的方法,但这个方法只能是由default修饰。可以实现有一个静态方法。

    3.接口中的成员变量默认是 public static final 修饰的。

    4.接口不能被实例化。

    5.类与接口之间采用implements来实现多个接口。

    6.子类重写抽象方法,必须加上public。

    7.接口中不能有静态代码块和构造方法。

    8.如果不想实现接口的方法,可以把这个类定义为抽象类,但是这个类如果被其它类继承,就需要重写。

    9.一个类可以实现多个接口,使用implements,用逗号隔开,这样可以解决多继承的问题。

  • 相关阅读:
    完整版:IPSec报文格式
    C++知识精讲15 | 三类基于贪心思想的区间覆盖问题【配套资源详解】
    okhttp添加公共参数
    d3.js 的使用
    【MySql】mysql之基础语句
    Python机器视觉--OpenCV进阶(核心)--图像的开,闭运算,形态学梯度,顶帽,黑帽运算
    报道 | 国内外运筹优化会议精选
    【记录】celery + mongodb 动态添加、更新定时任务时间
    正则表达式
    经典面试题-显式等待与隐式等待
  • 原文地址:https://blog.csdn.net/crazy_xieyi/article/details/126266418