抽象类:
Java中的抽象类在class之前加 abstract关键字代表这个类是一个抽象类,抽象类和普通类没有太大的区别,只是抽象类中多了抽象方法,抽象方法也是使用abstract关键字声明,抽象方法只有方法声明,没有方法体;
你也可以在抽象类中定义成员变量,跟普通类的定义方式没有本质上的区别,所以我们把抽象类理解成普通类的"超类"。抽象类一般作为父类来派生子类,子类如果是一个普通类,那子类就要重写抽象类的抽象方法。但是如果子类也是抽象类则不用重写。虽然抽象类和普通类的区别只是在抽象类中多了抽象方法,但是抽象类不能被实例化。而且抽象类及其抽象方法不能用final关键字修饰,因为抽象类本身的意义是在于被继承,然后子类重写抽象方法来达到多态的效果,你使用final关键字修饰了抽象类,该类就不能被继承,更别说重写抽象方法。所以说抽象类和抽象方法不用final修饰。
接口:
接口可以理解成一个升级版的抽象类,既然是一个升级版的抽象类,那自然也不能被实例化,也不能使用final关键字修饰其本身和方法。接口里面只有全局常量和抽象方法。我们在什么情况下使用接口呢。在你定义兔子这个类,接口中有jump这个抽象方法。这时候我们就可以用implement这个关键字使用接口,重写jump方法。接口代表了某种能力和行为或者表示一种规范和标准。如果你的定义的类中有接口里面的行为,那就可以使用接口来实现多态。而且一个类可以使用多个接口,不像继承一样,只能继承一个类,所以接口更加的灵活。