• 接口和抽象类的区别


    1、基本语法区别

    Java中接口和抽象类的定义语法分别为interfaceabstract关键字。

    抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:

    a、抽象类不能被实例化只能被继承;

    b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;

    c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;

    d、一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;

    e、抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。

    接口:Java中接口使用interface关键字修饰,特点为:

    a、接口可以包含变量、方法;变量被隐士指定为public static final,方法被隐士指定为public abstract(JDK1.8之前)

    b、接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题;

    c、一个类可以实现多个接口;

    d、JDK1.8中对接口增加了新的特性:(1)、默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;(2)、静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。

    如下例子所示:

    public interface Person{
      public static final int a=10;
      //JDK1.8
        default void sayHello(){
            System.out.println("Hello World");
        }
        public void say();
    }
    public abstract class Person{
      public abstract void say();
      public void eat(){};
    }
    

    如上述代码所示:

    接口只能是功能的定义,而抽象类既可以为功能的定义也可以为功能的实现。

  • 相关阅读:
    Linux 分卷压缩
    用 virtualenv 创建隔离的 Python 运行环境
    Ubuntu 16.04 安装 Python3.6
    Python 的全局变量
    Git 使用总结
    开源的许可证GPL、LGPL、BSD、Apache 2.0
    Python Unofficial Package Site
    apt-get update 更新 ubuntu时出现Hash sum mismatch的原因及解决方法
    Keep It Simple & Stupid
    Python IDLE 增加清屏功能
  • 原文地址:https://www.cnblogs.com/zgrey/p/jiekou.html
Copyright © 2020-2023  润新知