抽象类与接口

一.抽象类的概述

  我们把一个不是具体的功能称为抽象的功能,而一个类中如果有抽象的功能,该类必须为抽象类。

二.抽象类的特点

  • 抽象类和抽象方法(只有方法名,没有方法体)必须用abstract关键字修饰
  • 抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类
  • 抽象类不能实例化,因为它不是具体的。
  • 抽象类有构造方法,但是不能实例化。构造方法的作用是什么呢?用于子类访问父类数据的初始化。
  • 抽象的子类:1.如果不想重写抽象方法,该子类是一个抽象类;2.重写所有的抽象方法,这个时候子类是一个具体的类。
  • 抽象类的实例化是靠具体的子类实现的,是多态的方式。eg. Animal a = new Dog();
  • 抽象方法的权限修饰符必须为public

三.抽象类的成员特点

  • 成员变量:既可以是变量,也可以为常量
  • 构造方法:用于子类访问父类数据的初始化
  • 成员方法:既可以是抽象的,也可以是非抽象的

  抽象类的成员方法特点:

  1. 抽象方法:强制要求子类做的事情
  2. 非抽象方法:子类继承的事情,提高代码的重用性

四.抽象类不能和下面的关键字共存

  • private  冲突,非法的修饰符组合:abstract   和  private
  • final      冲突,非法的修饰符组合
  • static    无意义

五.接口的特点:

  • 接口用关键字interface表示:interface 接口名 { }
  • 类实现接口用implements表示:class 类名 implements 接口名{ }
  • 接口不能实例化,但是可以按照多态的方式来实例化
  • 接口是一种特殊的抽象类
  • 接口的子类
    1. 可以是抽象类,但是意义不大
    2. 可以是具体类,要重写接口中的所有抽象方法(推荐方法) 

  由此可见:

  1. 具体类多态(几乎没有)
  2. 抽象类多态(常用)
  3. 接口多态(最常用)

六.接口成员特点

成员变量:只能是常量,并且是静态的
    默认修饰符:public static final
构造方法:接口没有构造方法。
成员方法:只能是抽象方法
    默认修饰符:public abstract

七.

  类与类
    继承关系,只能单继承,可以多层继承。
  类与接口
    实现关系,可以单实现,也可以多实现。
    并且还可以在继承一个类的同时实现多个接口。
  接口与接口:
    继承关系,可以单继承,也可以多继承。

八.抽象类和接口的区别:

A:成员区别
  抽象类:
    成员变量:可以变量,也可以常量
    构造方法:有
    成员方法:可以抽象,也可以非抽象
  接口:
    成员变量:只可以常量
    成员方法:只可以抽象

B:关系区别
  类与类
    继承,单继承
  类与接口
    实现,单实现,多实现
  接口与接口
    继承,单继承,多继承

C:设计理念区别
  抽象类: 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能
  接口: 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能

原文地址:https://www.cnblogs.com/sutao/p/7219988.html