2

抽象类的三个特性(abstract)

  • 抽象类不允许被实例化只能被继承,也就是说你不能new 出来一个抽象类的对象。
  • 抽象类里面有两种属性和方法

    • 抽象属性和方法:只声明,不实现
    • 非抽象属性和方法:声明 + 实现
  • 子类实现抽象方法:子类必须实现父类中的所有抽象方法。

接口的三个属性(interface)

  • 接口不能包含属性
  • 接口只能声明方法,不能包含实现代码
  • 类实现接口类的时候,必须实现接口中声明的所有方法

抽象类和接口的区别

  • 抽象类是对成员变量和方法的抽象,是一种is-a关系,是为了解决代码复用问题
    is-a:代表类与类之间的继承关系
    比如:猫和狗都是动物,都继承动物的特性。(所谓动物的特性就相当于抽象类中的抽象属性和方法、猫和狗都具有动物的特性,即实现动物的抽象属性)
  • 接口仅仅是解决对方法的抽象(抽象类 - 类的抽象),是一种has-a关系,是为了解决解耦问题,提高代码的扩展性
    has-a:代表对象和它的属性之间的从属关系
    同一个类的对象,通过它的属性的不同值来区别
    比如:小明和小红 都是同一个类(Person) 但是他们有不同的属性值(Person xiaoming = new Person("小明"))是一个整体和部分的关系

两者再区别

  • 抽象类 - 强调它是什么

    B 继承 抽象类A 并实现了 A 中的抽象属性和方法,那么它就属于 A
    比如 鸟(有翅膀、尖嘴、会下蛋) -继承- B(会说人话):B继承鸟类这个抽象类那么他就得实现鸟类得相关特性,所以它就是一只鹦鹉

  • 接口 - 强调它有什么功能

    Man 和 Woman实现 接口Person 重写 Person 中的相关方法来,但是赋予了不同内容,进而有了不同的能力

总结

  • 抽象类是为了解决代码复用问题

    比如你要写所有的很多鸟相关的类、你把每个鸟都有的属性写在抽象类中、然后再在子类当中写入不同的鸟所特有的属性,这样就不用再在子类中添加这些属性。使得代码高度复用

  • 接口是为了解决抽象问题

    比如说你要写王者荣耀里所有的的英雄的技能,假设这些英雄都只有3个技能,那么我们就在接口中定义(技能一、技能二、技能三)即可、然后每个英雄的技能在子类中具体实现即可。


eacape
205 声望8 粉丝

JAVA 攻城狮