抽象接口分析

抽象类与接口

抽象类

  • 抽象类提供了继承的概念
  • 抽象类出发点就是为了继承
public abstract class Animal(){
public abstract void cry();
 }
public class Cat extends Animal(){
@Override
public void cry(){
System.out.println("喵")
}
}
public class Test(){
Animal a1 = new Cat();
a1.cry();
}

outpit:

接口

  • 接口可以看做是一种比抽象类更抽象的“类”(接口本身不是类)
  • 不是类 👉 不能实例化
  • 接口是抽象类的衍生,通过接口可以实现多重继承
  • 实现接口的类必须要实现接口所有方法

注意事项

  • 接口的所有方法自动被声明为public (为其他时会出错)
  • 接口中的成员变量自动为(public static final) 可以通过ImplementClass.name访问
  • 接口中不存在实现方法
  • 实现接口的非抽象类必须实现接口所有方法,抽象类可以不用事先
  • 实现多接口时注意避免方法名重复

抽象类与接口的区别

1.语言层次

  1. 抽象类可以有任意范围的成员数据,同时也可以有自己的非抽象方法;接口只能有静态且不能修改的成员数据,同时它所有的方法都为抽象
  2. 抽象类只能单继承;接口类可以实现多接口

2.设计层次

  1. 抽象层次不同,抽象类主要对应类抽象,根据不同类之间的共性提炼;接口主要是对行为的抽象
  2. 跨域不同;抽象类跨域的是具有相似特点的类(遵循is-a原则);接口则是跨越不同类
  3. 设计层次不同;抽象类一般自下而上设计,多个相似子类存在时,提取并新建父类;接口不用知道怎么实现,谁来实现

例子: 报警们(同时具有门的开/关方法,和报警方法)

abstract class Door(){
abstract void open();
abstract void close();
}
interface Alarm(){
void alarm();
}
class AlarmDoor extends Door implement Alarm(){
void open(){}
void close(){}
void alarm{}
}

如果在抽象类Door中加入alarm方法,则不符合isp原则,因为alarm不是Door的共性

posted @ 2018-10-18 17:01  kojimako  阅读(103)  评论(0编辑  收藏  举报