• Java入门 面向对象(接口) (第二十一天)


    什么是接口

    接口是一种约定
        有些接口只有名称
     面向接口编程:
            1、关心实现类有何能力,而不关心实现细节 
            2、面向接口的约定而不考虑接口的具体实现 

    接口的特性:

       1)接口不可以被实例化 

       2)实现类必须实现接口的所有方法

       3)实现类可以实现多个接口
              implements、多个接口使用逗号隔开
       4)接口中的变量都是静态常量(public static final)

    使用时: public interface MyInterface {
        public void foo();//方法
        //其他方法
    }
    所有方法默认都是:
    public abstract

    在Java中,类与类之间是单根继承(一个类只能有一个直接父类)

    ■一个类只能继承一个类(单根继承),但是一个类可以实现多个接口,多个接口之间使用,分隔接口中的方法只能是抽象方法,默认修饰符都是public abstract

    ■一个类实现了一个接口,必须重写接口中的所有抽象方法,如果不重写,那么实现了类也要定义    为抽象类

    ■接口不能实例化,但是可以将接口的引用指向其实现类实例

    ■接口的变量都是静态常量,默认修饰public static final

    接口中的方法都是抽象方法,默认修饰符是public abstract

          ■接口中的方法一定定义好之后就不要轻易的去修改,因为修改接口中的方法,接口的实现类都要对修改的方法进行重新操作,非常麻烦
          
          ■一个类要想新增一个功能,只需要新建一个接口,然后让这个类实现这个新建的接口就可以用这个接口定义的功能

    接口的使用:

    1)接口中的成员变量
           默认都是public static final的,必须显式初始化

      2)接口中的方法
           默认都是public abstract的

      3)接口没有构造方法,不能被实例化

      4)一个接口不能实现另一个接口,但可以继承多个其他接口

      5)一个类必须实现接口抽象方法(implements),除非这个类也是抽象类

    接口的使用步骤:

    1)编写USB接口 :根据需求设计方法
    2)实现USB接口 :实现所有方法
    3)使用USB接口 :用多态的方式使用

    抽象类与抽象方法

    抽象类VS普通类

    1)抽象类不能被实例化
           但可以创建一个引用变量,其类型是一个抽象类, 指向非抽象的子类实例
    2)普通类可以被实例化

    抽象方法VS普通方法
    1)有无方法体

    抽象类与抽象方法的使用:

    1)抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类

    2)如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类

    3)没有抽象构造方法,也没有抽象静态方法

    4)抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用

    抽象类与接口

    抽象类VS接口

      相同点:

          1)代表系统的抽象层
          2)都不能被实例化
          3)都能包含抽象方法
                   ■用于描述系统提供的服务,不必提供具体实现

      不同点:

          1)在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法
                  ■ 抽象类便于复用,接口便于代码维护
          2)一个类只能继承一个直接的父类,但可以实现多个接口

    使用原则:

            1)接口做系统与外界交互的窗口
                 ■接口提供服务
            2)接口本身一-旦制定,就不允许随意修改
            3)抽象类可完成部分功能实现,还有部分 
                  功能可作为系统的扩展点

    面向对象设计原则

    1)多用组合,少用继承
    2)针对接口编程
    3)针对扩展开放,针对改变关闭

    总结

    ◆Java中的接口
           ■属性全都是全局静态常量
           ■方法都是全局抽象方法
           ■无构造方法
    ◆一个类可以实现多个接口,非抽象类实现接口时必须
    实现接口中的全部方法
    ◆抽象类利于代码复用,接口利于代码维护

    接口代码:

    定义一个抽象类:

    1. package Lnterface.demo02;
    2. public abstract class Door {
    3. //定义开、关门功能
    4. public abstract void openDoor();
    5. public abstract void closeDoor();
    6. }

    定义两个接口:

    1. package Lnterface.demo02;
    2. public interface Lock {
    3. //定义锁“开锁”和“上锁”的功能
    4. public abstract void openLock();
    5. public abstract void closeLock();
    6. }

     

    1. package Lnterface.demo02;
    2. public interface TakePhoto {
    3. //接口中的方法都是抽象方法,默认修饰符是public abstract
    4. void image();
    5. }

    定义一个实现类:

    1. package Lnterface.demo02;
    2. /*
    3. * 一个类只能继承一个类(单根继承),但是一个类可以实现多个接口,多个接口之间使用,分隔
    4. * 接口中的方法只能是抽象方法,默认修饰符都是public abstract
    5. *
    6. * 一个类实现了一个接口,必须重写接口中的所有抽象方法,如果不重写,那么实现了类也要定义为抽象类
    7. * 接口不能实例化,但是可以将接口的引用指向其实现类实例
    8. *
    9. * 接口的变量都是静态常量,默认修饰修饰public static final
    10. *
    11. */
    12. public class AntiTheftDoor extends Door implements Lock,TakePhoto{
    13. @Override
    14. public void openDoor() {
    15. System.out.println("开门.......");
    16. }
    17. @Override
    18. public void closeDoor() {
    19. System.out.println("关门.......");
    20. }
    21. //重写方法
    22. @Override
    23. public void openLock() {
    24. System.out.println("插钥匙,左三圈,开锁");
    25. }
    26. @Override
    27. public void closeLock() {
    28. System.out.println("插钥匙,右三圈,关锁");
    29. }
    30. @Override
    31. public void image() {
    32. System.out.println("你已进入拍照监控区.....");
    33. }
    34. }

    定义一个测试类:

    1. package Lnterface.demo02;
    2. public class Test {
    3. public static void main(String[] args) {
    4. AntiTheftDoor atd=new AntiTheftDoor();
    5. atd.closeDoor();
    6. atd.closeLock();
    7. atd.image();
    8. System.out.println("出去玩.......");
    9. atd.openDoor();
    10. atd.image();
    11. atd.openLock();
    12. }
    13. }
  • 相关阅读:
    人工智能-卷积神经网络
    CSS Basic introduction
    C 标准库 - <string.h>
    Day12 尚硅谷JUC——集合的线程安全
    【linux】shell脚本调试
    Dual Mirror Descent for Online Allocation Problems
    gRPC 四模式之 服务器端流RPC模式
    微服务框架 SpringCloud微服务架构 3 Eureka 3.1 提供者与消费者
    区块链分层结构:不同开发框架的核心特征与价值
    深入理解 JVM 之——字节码指令与执行引擎
  • 原文地址:https://blog.csdn.net/m0_70516782/article/details/126274263