当我们编写一个类时,常常会在该类中定义一些方法,这些方法通常情况下是具体的,但在某些情况下,我们无法准确的知道这些方法的细节,这时候就需要我们创建一个抽象类,这些方法就是抽象方法。抽象类一般指父类,专门用来让子类继承,抽象方法必须被子类重写。我们通过添加abstract关键字来使该类变成抽象类,同样添加abstract关键字使方法变成抽象方法。
注意:
- 一个抽象类中可以不定义抽象方法,但是只要类中有一个抽象方法,则该类一定是抽象类。
- 抽象类不能被实例化。
- 如果一个子类继承一个抽象类,则子类需要通过覆盖的方式来重写抽象类中的所有抽象方法。如果子类没有完全重写抽象父类中所有方法,则子类仍是抽象的。
- 抽象方法可以与public,protected复合使用,但不能与final,private和static使用。
- abstract不能用于修饰属性,修饰局部变量,也不能用于修饰构造器。
实例:不同的动物都有进食的行为,但是在进食前需要捕捉到食物后才能进食,要求定义一个抽象的动物类,该类有一个抽象的捕食方法,在进食方法中调用捕食方法。定义三个不同的动物类,分别是狼,虎,猴这些类继承抽象的动物类。代码如下:
package start;
public abstract class Animal {
public abstract String predation();
public String eat() {
return ("嚼碎食物,将食物咽进肚子里。。。");
}
}
package start;
public class Tiger extends Animal {
public String predation() {
return ("老虎单枪匹马作战发现食物一击毙命");
}
}
package start;
public class Wolf extends Animal {
public String predation() {
return ("狼王有组织地安排捕食计划");
}
}
package start;
public class Monkey extends Animal {
@Override
public String predation() {
return ("猴子悠哉悠哉地爬到树上采摘香蕉");
}
}
package start;
public class Test {
public static void main(String[] args) {
Wolf w = new Wolf();
System.out.println(w.predation());
System.out.println(w.eat());
Tiger t = new Tiger();
System.out.println(t.predation());
System.out.println(t.eat());
Monkey m = new Monkey();
System.out.println(m.predation());
System.out.println(m.eat());
}
}