博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
013_面向对象_抽象类和接口
阅读量:5979 次
发布时间:2019-06-20

本文共 1868 字,大约阅读时间需要 6 分钟。

1.抽象类(abstract)

  (1)特点

    ①方法只有声明没有实现时,该方法就是抽象方法,抽象方法必须定义到抽象类中,该类也必须被abstract修饰

    ②抽象类不可以被实例化,因为调用抽象方法没有意义。

    ③抽象类必须有子类覆盖所有的抽象方法,该子类才可以实例化,否则,这个子类还是抽象类

  (2)常见问题

    ①抽象类中有构造函数吗?

      有,用来给子类对象初始化

    ②抽象类可以不定义抽象方法吗?
      可以。目的是不让该类创建对象,通常这个类中的方法有方法体,却没有内容
    ③抽象关键字不可以和哪些关键字共存?
      private,static,final
    ④抽象类和一般类的异同
      相同:都是用来描述事物的,都在内部定义了成员
      异同:a.一般类中有足够的信息描述事物,抽象类描述事物的信息可能不足
         b.一般类中不能定义抽象方法抽象类可以定义抽象方法,同时也可以定义非抽象方法
         c.一般类可以被实例化,抽象类不可以被实例化

2.接口(interface)

  接口,在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法()

  (1)固定的修饰符

    ①全局常量:public static final

    ②抽象方法:public abstract

  (2)特点

    ①一个类可以实现多个接口,而且在继承另一个类的同时,还可以实现多个接口。

    ②接口的出现避免了单继承的局限性,接口与接口之间是继承关系,而且接口可以多继承。

  (3)抽象类和接口的异同

    ①相同点:

       都是不断向上抽取而来的

    ②不同点:
      a.抽象类需要继承,而且只能单继承
       接口需要被实现,而且可以多实现

      b.抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法

       接口中只能定义抽象方法,必须由子类去实现

      c.抽象类的继承,是 is 关系,在定义该体系的基本共性内容。

       接口的实现是 like 关系,在定义体系额外功能。

  (4)接口的应用:

    接口类型的引用,用于接受(指向)接口的子类对象。

  (5)接口的代码实现

/*笔记本电脑使用。为了扩展笔记本的功能,但日后出现什么功能设备不知道。定义一个规则,只要日后出现的设备都符合这个规则就可以了。规则在java中就是接口。*/interface USB{    public abstract void open();    public abstract void close();}class BookPc{    public static void main(String[] args)    {        useUsb(new UPan());        useUsb(new UsbMouse());    }        public static void useUsb(USB u)    {        if(u!=null)        {            u.open();            u.close();        }    }}class UPan implements USB{    public void open()    {        System.out.println("UPan open");    }        public void close()    {        System.out.println("UPan close");    }}class UsbMouse implements USB{    public void open()    {        System.out.println("UsbMouse open");    }        public void close()    {        System.out.println("UsbMouse close");    }}

  

转载于:https://www.cnblogs.com/lydbky/p/8245614.html

你可能感兴趣的文章
微信公众号-入门的坑
查看>>
为什么你的企业需要使用聊天机器人来在市场竞争中保持不败之地
查看>>
IdleHandler,页面启动优化神器
查看>>
ES6 学习笔记 ( let 和 const )
查看>>
Android 源码分析之旅4 1 Android HAL层概述
查看>>
面试总结3 介绍spring
查看>>
浅谈Nginx服务器的内部核心架构设计
查看>>
深入vue2.0底层思想--模板渲染
查看>>
webpack4.0入门指南(一)安装和转换es6语法
查看>>
理解消息转发机制
查看>>
深入浅出HTTP
查看>>
使用 Docker 搭建 Laravel 本地环境
查看>>
android常用设计模式之单例模式
查看>>
从零开始搭建一个 Webpack 开发环境配置(附 Demo)
查看>>
RAC 使用方法总结
查看>>
深度解析国内首个云原生数据库POLARDB的“王者荣耀”
查看>>
浏览器打印--类似快递拆包多个单号打印
查看>>
回顾·深度学习的可解释性与低频事件学习在金融领域的研究与应用
查看>>
逆向直播盒子MT·Box-iOS客户端
查看>>
JavaScript异步编程的6种方法
查看>>