• 【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. }

    下一篇文章:内部类

  • 相关阅读:
    ubuntu 指纹
    jQuery Validation Engine验证模拟的下拉列表非select
    18 行为型模式-观察者模式
    2015软专算法题T2
    Linux运维面试题总结—Linux基础、计算机网络基础
    怎样防止缓存击穿?
    预制菜:冷链运输的新商机
    【文章学习系列之模型】DAGMM
    #力扣:14. 最长公共前缀@FDDLC
    Kubernetes架构与组件详解
  • 原文地址:https://blog.csdn.net/qq_57268251/article/details/133606329