一、抽象方法
-
形式
一定在抽象方法中
只有声明,而没有具体的实现。抽象方法的声明格式为:
abstract void fun();//子类必须重写这个方法
二、抽象类
-
普遍类为什么需要变成抽象类?
1. 该类中的方法必须被定义 2. 该类中的方法在子类中一定是多态形式(即一定会被重写)
-
定义
具有0到多个抽象方法的类
-
作用
使用抽象类,限制实例化
public abstract class Animal{//Animal类无法被直接实例化,但是可以通过向上转型来指向他的子类实例 //这里面定义的方法在其子类一定要进行重写! }
-
目的
- 避免子类设计的随意性(由父类限制了子类应该有的方法,但是具体过程由子类实现)
- 避免父类无意义的实例化(因为我们通常使用具体的方法时就只需要实例子类就可以了)
-
注意事项
- abstract不能与static final private等连用
三、接口(Interface)
-
定义
接口在JAVA编程语言中是一个抽象类型(Abstract Type),它被用来要求类(Class)必须实现指定的方法,使不同类的对象可以利用他们共有的一部分属性(方法)进行沟通。接口通常以interface来宣告,它仅能包含方法签名(Method Signature)以及常数宣告(变量宣告包含了 static 及 final,一个接口仅仅包含方法声明(除默认方法和静态方法),不会有方法的实现
public interface Predator { boolean chasePrey(Prey p); void eatPrey(Prey p); int temp;//这里前面自动包含public static final(公共并且共有,不允许被修改)的信息 //下面是默认方法和静态方法,都可以带方法体(JDK8以上支持) default void connection(){//通过对象名直接调用 System.out.println("我是接口中默认方法"); } static void test(){//通过接口名调用 System.out.println("我是接口中静态方法"); } }
-
接口文件命名规则
I+具体的功能;
-
特点:
- 接口内的所有方法都是抽象方法,因此前面不需要加Abstract
- 由于接口代表着一个对外行为的集合,所以接口内任何方法都是公开的(public),同样不需要刻意加上
- 接口无法被实例化,只能被类实现,并且实现接口的类中必须实现其所有方法(即在实现接口的类中必须重写接口中的所有方法),否则就必须宣告为抽象类
- JAVA的一个类中可以实现多个接口
- 接口也有继承关系,并且可以继承多个父类(与普通类不同)
-
实现
public class Lion implements Predator { public boolean chasePrey(Prey p) { // 添加具体的实现方法 } public void eatPrey (Prey p) { // 添加具体的实现方法 } //上面的默认方法和静态方法不需要重写 }