• 抽象类和接口


    抽象类和接口是java语言中对于抽象定义的两种机制,正是由于这两种机制的存在,才赋予了java强大的面向对象能力。

    抽象类和接口之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多初学者对使用哪个总是混淆。

    所以本文将

      ①分别介绍抽象类和接口

      ②对两者的区别进行剖析

    一:抽象类

      ①概念:

      抽象类和一般类没有太大的区别,都是在描述事物,只不过抽象类在描述事物时,有些功能不具体。所以抽象类和一般类在定义上,都是需要定义属性和行为的。只不过,比一般类多了一个抽象函数。而且比一般类少了一个创建对象的部分。

      ②特点:

      1.抽象方法只能定义在抽象类中,抽象类和抽象方法必须被abstract修饰,但抽象类中可以不定义抽象方法。

      2.抽象类不可以被实例化

      3.只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。

      4.抽象类中有构造方法,是用于给子类对象初始化的。

      5.抽象类关键字abstract不可以和final,private,static共存。

      ③什么时候用:

      在描述一个行为的时候,这个行为有N种动作,这时候就要用到抽象类了。

    二:接口

      ①概念:

      抽象类是描述一个事物本质的内容的,而接口则是对一个事物的扩展。

      Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

      ②特点:

      1.是用关键字interface定义的

      2.接口中的成员都有固定的修饰符

        成员变量:public static final

        成员函数:public abstract

        eg:     

    interface Inter{
        public static final int x = 3;
        public abstract void show();
    }

      3.接口中的方法都是抽象方法,而且接口不可以被实例化,接口的子类必须实现了接口中所有的抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。

      4.一个类在继承另一个类的同时,还可以实现多个接口,这就是多继承改良后的结果。 

    三:抽象类和接口

      ①语法层面的区别:

        共性:都是不断向上抽取的结果

        区别:

          1:抽象类只能被继承,而且只能单继承。  

          接口需要被实现,而且可以多实现。

          2:抽象类中可以定义非抽象方法,子类可以直接继承使用。

          接口中都是抽象方法,需要子类去实现。

          3:抽象类使用的是 is a 关系。

          接口使用的 like a 关系。

          4:抽象类的成员修饰符可以自定义。

          接口中的成员修饰符是固定的。全都是public的。

          5.抽象类可以有构造方法。

          接口中不能有构造方法。

      ②设计层面的区别:

          对于这个问题你可以去美国问一下Java之父——詹姆斯·高斯林,相信会得到十分具有权威性,最专业的回答。

       什么? 太远了?      呃。。。。好吧,那么鄙人不才,谈谈自己的理解。希望你可以从中得到一些东西。嘻嘻

       接口这个东西呢,更多的是用于系统设计上,可以理解为电脑主板上的接口,最初的主板上面什么接口都没有,每一次配置升级的时候,都是重新再做一块主板,麻烦死了,所以人们就聚到一起喝喝茶,想一个好的办法解决这个问题,还真给想出来了,每一次一个硬件升级都需要重新做一个主板,那么你自己升级就去升啊,别烦我啊,这样吧,咱们两个定个规则,我是做主板的,我在主板上留个特定的接口,你是做CPU的,你CPU也做这么一个接口,你做好之后直接往上面一插不就完了。哎呀,大家都很高兴,看来还是喝茶好啊。

      从上面可以看出接口设计的特性:1.规则2.扩展3.降低耦合

      好了,说完了接口设计的特性,来继续回到我们的话题,抽象类和接口设计层面的区别。

      抽象类呢,是对类进行抽象,是描述事物的本质。而接口呢,是事物功能,行为的抽象。一般我们写抽象类,都是先知道子类,然后根据子类抽象出父类,它是自下到上的。而接口就不一样了,什么子类,我根本不需要知道,我只需要定义一个规则,你爱实现实现,不实现算了。这个是自顶到下设计的。

      好了。我知道的就这么多了,也没举列子,写代码,相信大家不会怪我的,哈哈

      有什么需要解决的问题,可以在下面评论,大家一块解决啊、

          

        

     

      

      

      

     

  • 相关阅读:
    dubbo-admin 2.0安装部署
    一文多发神器
    springboot整合druid踩坑记录
    thymeleaf中的重定向的绝对路径问题
    路径问题
    sp_executesql介绍和使用
    java.net.UnknownHostException: api.weixin.qq.com解决办法
    调用百度地图示例
    浅析分布式架构
    城乡医保用户角色未分配修改
  • 原文地址:https://www.cnblogs.com/makaruila/p/4828914.html
Copyright © 2020-2023  润新知