乐趣区

关于java:区分和使用抽象类与接口

抽象类的三个个性(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 个技能,那么咱们就在接口中定义 (技能一、技能二、技能三) 即可、而后每个英雄的技能在子类中具体实现即可。

退出移动版