• 【Java】抽象类和接口的区别


    1. 成员区别

    • 抽象类  变量 常量;有构造方法,有抽象方法,也有非抽象方法
    • 接口  常量,抽象方法(JDK8 在接口中定义  非抽象方法)

    2. 关系区别

    • 类与类  继承单继承
    • 类与接口  实现,单实现和多实现
    • 接口与接口  继承,单继承和多继承

    3. 设计区别

    • 抽象类  对类抽象,包括属性行为(对事物的抽象)
    • 接口  对行为抽象,主要是行为(对行为的抽象)

     下面举例子说明 3.设计区别

    例子:门和报警器,将门设为抽象类

    行为:关门  开门  报警

    门的品牌——PanPan门 MeiXin门 ...

    不是所有的品牌门 都带 报警

    比如 PanPan门  关门 开门 报警

            MeiXin门 关门 开门  没有报警

    门——抽象类



    案例代码:

    Door.java

    1. package com.面向对象.Demo32;
    2. public abstract class Door {
    3. private String name;
    4. private int height;
    5. private int widht;
    6. public Door(String name, int height, int widht) {
    7. this.name = name;
    8. this.height = height;
    9. this.widht = widht;
    10. }
    11. public String getName() {
    12. return name;
    13. }
    14. public int getHeight() {
    15. return height;
    16. }
    17. public int getWidht() {
    18. return widht;
    19. }
    20. public abstract void open(); //开门
    21. public abstract void close();//关门
    22. }

    Alarm.java

    1. package com.面向对象.Demo32;
    2. public interface Alarm { //报警接口
    3. void alarm();//报警功能
    4. }

    PanPanDoor.java

    1. package com.面向对象.Demo32;
    2. public class PanPanDoor extends Door implements Alarm {
    3. public PanPanDoor(String name, int height, int widht) {
    4. super(name, height, widht);
    5. }
    6. @Override
    7. public void open() {
    8. System.out.println("PanPanDoor-open()");
    9. }
    10. @Override
    11. public void close() {
    12. System.out.println("PanPanDoor-close()");
    13. }
    14. @Override
    15. public void alarm() {
    16. System.out.println("PanPanDoor-alarm()");
    17. }
    18. }

    MenXin.java

    1. package com.面向对象.Demo32;
    2. public class MenXin extends Door{
    3. public MenXin(String name, int height, int widht) {
    4. super(name, height, widht);
    5. }
    6. @Override
    7. public void open() {
    8. System.out.println("MeiXin-open()");
    9. }
    10. @Override
    11. public void close() {
    12. System.out.println("MenXin-close()");
    13. }
    14. }

    Test01.java

    1. package com.面向对象.Demo32;
    2. public class Test01 {
    3. public static void main(String[] args) {
    4. MenXin meiXinDoor = new MenXin("MeiXinDoor", 175, 300);
    5. System.out.println(meiXinDoor.getName() + "," + meiXinDoor.getHeight() + "," + meiXinDoor.getWidht());
    6. meiXinDoor.open();
    7. meiXinDoor.close();
    8. System.out.println("===================");
    9. PanPanDoor panPanDoor = new PanPanDoor("PanPanDoor", 280, 175);
    10. System.out.println(panPanDoor.getName() + "," + panPanDoor.getHeight() + "," + panPanDoor.getWidht());
    11. panPanDoor.open();
    12. panPanDoor.close();
    13. panPanDoor.alarm();
    14. }
    15. }

    下一篇文章:内部类

  • 相关阅读:
    侦查帮派问题
    Java面试题初级准备
    PyQt5 布局Layout
    基于JAVA框架的报修系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    使用CXF调用WSDL(二)
    二分查找算法解析
    String类 - 下篇
    操作系统实验二、进程和线程管理(Windows 2学时)多线程创建
    Spring Boot中Excel的导入导出的实现之Apache POI框架使用教程
    蓝牙耳机哪个品牌最好?双11平价好用的蓝牙耳机推荐
  • 原文地址:https://blog.csdn.net/qq_57268251/article/details/133606329