慢慢人生路,学点Jakarta基础-深入剖析Java的接口和抽象类

  在java面向对象编程的,抽象类和接口始终存在有疑问的地方,因为两者太多相似有太多不同,在刚开始学习的时候经常弄的不对,使用情景搞混,今天来总结之前学习Java中接口和抽象类的问题。

  抽象类

  了解:只声明,未具体实现。

abstract void cry();

  抽象方法必须使用关键字abstract进行修饰,如果一旦一个类中包含了abstract方法,那么这个类必须使用abstract进行修饰;因为抽象类中含有未实现的方法,抽象类不能被实例化;抽象类不一定包含抽象方法,也就是说抽象类可以没有抽象方法(那么这个抽象类为什么要设计呢?);抽象方法不能存在方法体;抽象类可以有实现了的方法当一类继承的父类是抽象类时,必须全部实现抽象类的抽象方法。

  对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。

 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

 1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

 2)抽象类不能用来创建对象;

 3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

 

  接口

  设计思想:高内聚低耦合

[public] interface InterfaceName { 
  
}

 

  使用implement关键字遵循接口:

class Animalimplements Interface1,Interface2,[....]{ 
} 

 

  当一类实现多个接口时,如果此类事非抽象类那么必须实现该接口的全部方法;

原则:

  当一类实现了一个接口,就要实现此接口的全部方法;

  接口不能被实例化(正是由于接口的变量不能用private protected修饰,默认 public static final,而方法被隐式地指定为public abstract方法用其他关键字,比如private、protected、static、 final等修饰会报编译错误))

  接口中所有方法不能有方法体,也就是说必须是抽象方法;

  定义在接口中的变量,作为全局变量使用:访问形式 接口名.变量名。

  接口不能继承类,但是可以继承其他的接口。

 两者对比

  一个类只能单继承一个抽象类。但是一个类可以实现多个接口

  成员变量:抽象类可以是任何类型,接口只能是public static final类型。

  成员方法:抽象类可以提供实现的方法体,接口中只能存在public abstract 方法。

  静态方法|代码块:接口中不存在,抽象类可以有。

  小结

   Java的继承是单继承,这种机制能够保证类的纯洁性,比C++的多继承机制简介。但是不可否认对子类的扩展有一定的影响,因此实现接口可以看做是对继承的一种补充。还有一点就是继承是层级式的,不太灵活。当修改其中某各类可能打破这种继承的平衡,而接口没有这样的麻烦,因为他只针对实现接口的类起作用。实现接口可在不打破继承关系的前提下,对某各类功能扩展,非常灵活。

posted @ 2018-03-11 11:40  赵小叔  阅读(229)  评论(0编辑  收藏  举报