美文网首页Java学习笔记
coreJava_8——抽象类、接口

coreJava_8——抽象类、接口

作者: panda_Hi | 来源:发表于2018-08-11 14:21 被阅读2次

三、abstract修饰符

可用来修饰类和成员方法。
. 用abstract修饰的类表示抽象类,抽象类不能实例化,即不允许创建抽象类本身的实例。没有用abstract修饰的类称为具体类,具体类可以被实例化。
. 用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。
没有abstract修饰的方法称为具体方法,具体方法具有方法体。

语法规则:

  1. 抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类;
  2. 没有抽象构造方法,也没有抽象静态方法;
  3. 抽象类中可以有非抽象的构造方法;
  4. 抽象类及抽象方法不能被final修饰符修饰。

四. 接口

接口使用的目的:解决多重继承问题;
例如Fish类继承Animal类,表明Fish是一种动物,但鱼同样也是一种食物,如何表示这种关系呢?
由于Java语言不支持一个类有多个直接的父类,因此无法用继承关系来描述鱼既是一种食物,又是一种动物,为了解决这一问题,Java语言引入接口类型,简称接口。一个类只能有一个直接的父类,但是可以实现多个接口。 采用这种方式,Java语言对多继承提供了有力的支持。

  1. 接口是抽象类的另外一种形式

    抽象类抽象到极致就是接口,抽象类可存在有方法体的方法,接口中的方法全部为抽象方法;

  2. 接口中的所有方法均是抽象方法, 默认都是public、abstract类型的;

    public interface A {
    void method1(); //合法,默认为public、abstract类型
    public abstract void method2();//合法,显示声明为public、abstract类型

  3. 接口中的成员变量默认都是public, static, final类型,必须被显式初始化;
    public interface A {
    int CONST = 1; //合法,CONST默认为public, static, final类型
    public static final int OPAQUE = 1; //合法,显示声明为public static final 类型
    }

  4. 接口中只能包含public, static, final类型成员变量和public、abstract类型的成员方法;

  5. 接口中没有构造方法,不能被实例化。

  6. 一个类只能继承一个直接的父类,但能实现多个接口。

抽象类和接口比较:

  1. 相同点:
    a. 都不能被实例化;
    b. 都能包含抽象方法;
  2. 不同点;
    a. 抽象类中可以为部分方法提供默认的实现,从而避免子类中重复实现它们,提高代码的可重用性,而接口中只能包含抽象方法;
    b. 一个类只能继承一个直接的父类,这个父类有可能是抽象类;但一个类可以实现多个接口,这是接口的优势所在。

相关文章

网友评论

    本文标题:coreJava_8——抽象类、接口

    本文链接:https://www.haomeiwen.com/subject/kkrdbftx.html