zoukankan      html  css  js  c++  java
  • 【Java】抽象类和接口

    一、抽象类和抽象方法

      1.什么是抽象类

        普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。

        但是普通类中不能有抽象方法,什么是抽象方法呢?

        抽象方法,是指使用关键字abstract修饰的类,只声明返回的数据类型、方法名称和所需参数,并没有方法体的方法。

        也就是说我们声明即可,并不要实现。

        而拥有抽象方法的类就是抽象类,抽象类同样要使用abstract关键字声明。

      2.那么为什么有抽象类和抽象方法呢?

        简单的说就是为了实现多态。我们可以继承抽象类,实现其内部方法来创建和修改成新的类。

      3.抽象类的使用原则

        (1)抽象类必须为public或者protected(如果是private则不能被子类继承,违背了设计初衷)

        (2)抽象类不能直接实例化,也就是不能直接new

            如果想实例一个抽象类就必须建立一个非抽象的子类。

            当然子类必须实现抽象类中的抽象方法,然后创建一个这个抽象类的子类完成新建实例。

        (3)一个子类只能继承一个抽象类,因为JAVA是单继承机制

        (4)子类必须重写实现抽象类中的全部抽象方法,如果有抽象没有实现,子类必须要变成抽象类。

                          换句话来说就是,当一个抽象类继承一个抽象类,才可以不实现全部抽象方法。

      4.抽象类与抽象方法

        (1)抽象类中不一定要有抽象方法。也就是说,抽象类中可以没有抽象方法,可以有已经实现了的方法。

        (2)含有抽象方法的类一定是抽象类。如果一类中含有抽象方法,那么该类一定是抽象方法。 

      注意:抽象类可以不包括抽象方法,它反正不会去实例化,抽象类不能被实例化,也就是不能用new关键字去产生对象。

            抽象方法只需声明,而不需实现,抽象类的子类必须覆盖所有的抽象方法后才能被实例化。

                      否则这个子类还是个抽象类,里面的方法是不是抽象的没有本质影响。

     二、接口

       1.什么是接口

        接口是在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。

        一个类通过继承接口的方式,从而来继承接口的抽象方法。 

       2.接口特性

        (1)接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract

                         (只能是 public abstract,其他修饰符都会报错)。

        (2)接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量

                         (并且只能是 public,用 private 修饰会报编译错误)。

        (3)接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。  

       注意

          接口是隐试抽象,当声明接口的时候,不用使用abstract关键字

          接口中的每一个方法也是隐试抽象,不用使用abstract关键字

          接口中的方法都是public的

    三、接口和抽象类的异同   

       1.接口与抽象类的相同点

        (1)接口和抽象类都不能被实例化

        (2)子类继承了接口和抽象类都要实现抽象方法

       2.接口与抽象类的不同点

        (1)抽象类中可以含有方法体,接口不可以,只能包含抽象方法

        (2)抽象类的成员变量可以是各种类型的,而接口的成员变量只能是public static final类型的

        (3)接口中不能含有静态代码块以及静态方法(用static关键字来修饰的方法),抽象类中可以有

        (4)接口的扩展性好,一个类只能继承一个抽象类,但是可以继承多个接口

        (5)抽象类可以有构造方法,接口则不可以有

      

      

  • 相关阅读:
    java Des 加密解密技术
    JAVA处理外部链接的方法
    javascript 中escape、encodeURI、encodeURIComponent 区别
    JQuery与JS 遍历和操作 父页面控件的比较
    JS 添加删除元素 /DOM
    jquery 验证所有text,textare非法字符
    jquery url检测遇到的jquery跨域问题及JSONP的使用
    二叉树遍历非递归算法——后序遍历
    二叉树遍历非递归算法——中序遍历
    二叉树遍历非递归算法——先序遍历
  • 原文地址:https://www.cnblogs.com/zzhangyuhang/p/8515775.html
Copyright © 2011-2022 走看看