一、抽象类

1、理解

abstract关键字定义的,称为抽象类
abstract关键字定义的方法,称为抽象方法
意义:
当设计父类时,发现该父类根本不需要创建对象,并且里面有不好描述的方法。这个时候往往将该父类设计成抽象类!

2、abstract关键字

abstract属于一种修饰符,只能用于修饰类或方法不能修饰属性、构造器、局部变量

3、抽象类

语法:
  [修饰符] abstract class 类名{}
特点:

①抽象类不可以使用final修饰符,原因:和抽象类的意义冲突(final修饰的类不可以被继承)
②抽象类中可以有普通成员,也可以有抽象方法
③抽象类中有构造器,目的:为了初始化信息
④抽象类不可以创建本类对象
⑤抽象类的扩展:子类继承抽象类时,如果子类是具体的实现类,要求必须实现抽象类中的抽象方法,否则,不用实现抽象类的抽象方法

4、抽象方法

语法:
  [修饰符] abstract 返回类型 方法名(参数列表);
特点:

①抽象方法没有实现体,只有方法签名,使用分号结尾
②修饰符不可以是private、static、final,因为违背了实现的意义
③抽象方法只能出现在抽象类或接口中,不能出现在具体的实现类中
④当含有抽象方法的类或接口,被实现类实现时,要求必须实现里面所有的抽象方法

二、接口

1、好处

避免了单继承局限性
②接口的实现更加灵活,实现类和接口之间不再是is-a 的关系,仅仅需要 like-a 的关系
③提高代码的解耦性,降低依赖性

2、定义特点

①使用interface关键字定义,修饰符只能是public或默认
jdk8之前,接口中只能是静态常量+抽象方法
  静态常量的修饰符,只能是public static final ,可以省略
  抽象方法的修饰符,只能是public abstract,可以省略
 jkd8对接口的改进:接口中可以有静态方法和默认方法
  静态方法:
    public static 返回类型 方法名(参数列表){
      //实现体
    }
  默认方法:
    pubilc default 返回类型 方法名(参数列表){
      //实现体
    }
jdk9对接口的改进:接口中可以有私有方法(jdk8增加了可以实现的方法,为了方法体中调用一些共同的代码,增加私有方法,供本接口内部使用)
  private 返回类型 方法名(参数列表){}

注意:

 当实现的接口和父类中有同名的实现方法时,子类默认执行的是父类的方法,遵循"类优先"原则
 当实现的多个接口中有同名的实现方法时,子类必须重写该方法,否则有歧义,编译报错

③接口中没有构造器
④接口不能创建本身对象

3、使用特点

①类可以实现多个接口,使用implements关键字
  class A implements 接口1,接口2{}
②类可以既继承父类,又实现接口
  class A extends B implements 接口1,接口2{}
③接口可以继承多个接口,使用extends关键字
  interface Inter extends 接口1,接口2{}
④普通的实现类实现接口的话,必须实现里面所有抽象方法;抽象类实现接口的话,不用全部实现所有抽象方法

 三、抽象类和接口比较

 

定义关键字

构造器 创建对象本身 能否有普通成员 里面的属性 里面的抽象方法 继承
抽象类 abstract class 可以 无要求

不能是private、final、static,

其他修饰符可以

单继承
接口 interface 不可以

要求必须是静态的常量属性

修饰符只能是public static final,可以省略

jdk8之前只能是public abstract,可以省略

jkd8之后可以是静态方法和默认方法

jkd9之后可以是私有方法

多继承多实现
posted on 2018-08-23 16:45  明德博学勤奋求实  阅读(189)  评论(0编辑  收藏  举报