• java--接口


    一个类只能继承一个类(单根继承),但是一个类可以实现多个接口,多个接口之间使用,分隔
     * 接口中的方法只能是抽象方法,默认修饰符都是public abstract
     * 一个类实现了一个接口,必须重写接口中的所有抽象方法,如果不重写,那么实现了类也要定义为抽象类
     * 接口不能实例化,但是可以将接口的引用指向其实现类实例
     * 接口的变量都是静态常量,默认修饰修饰public static final

    代码示例:

    防盗门实现门和锁的功能:

    1. package cn.bdqn.demo02;
    2. public interface Lock {
    3. // 定义锁“开锁”和“上锁”的功能
    4. public abstract void openLock();
    5. public abstract void closeLock();
    6. }
    1. package cn.bdqn.demo02;
    2. public abstract class Door {
    3. //定义门的“开门”和“关门”功能
    4. public abstract void openDoor();
    5. public abstract void closeDoor();
    6. }
    1. package cn.bdqn.demo02;
    2. public class AntiTheftDoor extends Door implements Lock,TakePhoto {
    3. @Override
    4. public void openDoor() {
    5. System.out.println("用力一推,门开了....");
    6. }
    7. @Override
    8. public void closeDoor() {
    9. System.out.println("用力一拉,门关了......");
    10. }
    11. @Override
    12. public void openLock() {
    13. System.out.println("插入钥匙,左转3圈,锁开了......");
    14. }
    15. @Override
    16. public void closeLock() {
    17. System.out.println("插入钥匙,右转3圈,上锁了....");
    18. }
    19. @Override
    20. public void image() {
    21. System.out.println("咔嚓,请注意你的行为,已经拍照存档了......");
    22. }
    23. }

    USB风扇和USB鼠标实现USB功能:

    1. package cn.bdqn.demo03;
    2. public interface USB {
    3. //定义两个方法
    4. void electric();
    5. void data();
    6. }
    1. package cn.bdqn.demo03;
    2. public class USBFengSan implements USB {
    3. @Override
    4. public void electric() {
    5. System.out.println("风扇获取电能,风扇开始运作....");
    6. }
    7. @Override
    8. public void data() {
    9. }
    10. public void qqqq(){
    11. System.out.println("我是风扇类中独有的方法");
    12. }
    13. }
    1. package cn.bdqn.demo03;
    2. public class USBMouse implements USB {
    3. @Override
    4. public void electric() {
    5. System.out.println("鼠标获取电能,开始运作....");
    6. }
    7. @Override
    8. public void data() {
    9. System.out.println("获取数据传输能力,开始传输数据....");
    10. }
    11. public void test(){
    12. System.out.println("我是鼠标类中特有的方法");
    13. }
    14. }

     接口不能实例化

    接口的引用不能调用实现类中特有的方法,需要进行向下转型

    1. package cn.bdqn.demo03;
    2. public class Test {
    3. public static void main(String[] args) {
    4. // 接口不能实例化
    5. // USB usb = new USB();
    6. //直接通过接口的实现类构造方法创建对象
    7. USBFengSan usbf = new USBFengSan();
    8. usbf.electric();
    9. usbf.data();
    10. System.out.println("---------------");
    11. //通过向上转型创建实现类对象
    12. //向上转型:“父类(接口)的引用指向实现类的实例
    13. USB usb = new USBFengSan();
    14. usb.electric();
    15. usb = new USBMouse();
    16. usb.electric();
    17. //接口的引用不能调用实现类中特有的方法,需要进行向下转型
    18. // usb.test();
    19. //在向下转型过程中,容易出现类型转换异常
    20. // USBFengSan usbs = (USBFengSan)usb;
    21. // USBMouse usbm = (USBMouse)usb;
    22. // usbm.test();
    23. //可以使用instanceof关键字进行类型判断,避免异常
    24. if(usb instanceof USBFengSan){
    25. USBFengSan usbs = (USBFengSan)usb;
    26. usbs.qqqq();
    27. }else if(usb instanceof USBMouse){
    28. USBMouse usbm = (USBMouse)usb;
    29. usbm.test();
    30. }
    31. }
    32. }

    接口特性

    接口不可以被实例化

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

    实现类可以实现多个接口 implements、多个接口使用逗号隔开

    接口中的变量都是静态常量(public static final)

    所有方法默认都是: public abstract

  • 相关阅读:
    软件测试面试题:对于有系统大量并发访问,你会如何做测试,有什么建议?
    人工智能应该怎么学?
    【NNDL作业】图像锐化后,为什么“蒙上了一层灰色”?
    4.3.3 【MySQL】Redundant行格式
    GcExcel与 Apache POI 在功能和性能上的对比测试
    Web前端面试之Vue—对Vue的理解
    蓝桥等考C++组别六级 007
    数据接口工程对接BI可视化大屏(五)数据接口发布
    加密市场进入寒冬,是“天灾”还是“人祸”?
    Java线程中sleep()、wait()、yield()、join()方法的使用
  • 原文地址:https://blog.csdn.net/asdfg2047/article/details/126254026