在java中有一个关键字:abstract,可以修饰类和成员方法
abstract修饰类就是抽象类,修饰方法,就是抽象方法
抽象方法:只有方法签名,一定不能有方法体
注意事项、特点:
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
类该有的成员(成员变量、方法、构造器)抽象类都可以有
抽象类主要特点:
抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现
一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类
使用抽象类的好处
- 父类知道每个子类都要做某个行为,但每个子类要做的情况不一样,父类就定义成抽象方法,交给子类去重写实现。我们设计这样 的抽象类,就是为了更好的支持多态。
public abstract class Animal { private String name; public abstract void cry(); public String getName() { return name; } public void setName(String name) { this.name = name; } } public class Cat extends Animal { @Override public void cry(){ System.out.println(getName()+"喵喵的叫~~"); } } public class Dog extends Animal { @Override public void cry(){ System.out.println(getName()+"旺旺的叫~~"); } } public class Test { public static void main(String[] args) { Animal a=new Cat(); a.setName("咪咪"); a.cry(); } }
-
抽象类的常见应用场景:模板方法设计模式
模板方法设计模式:
解决方法中存在重复代码的问题
一个是模板方法:把相同代码放进去
一个是抽象方法:具体实现交给子类完成
public abstract class People {
//建议使用final关键字修饰模板方法
public final void write(){
System.out.println("《我的爸爸》");
System.out.println("我的爸爸好啊,我的爸爸好厉害");
System.out.println(writeMain());
System.out.println("感谢我的爸爸");
}
public abstract String writeMain();
}
public class Teacher extends People{
@Override
public String writeMain() {
return "我给爸爸买水果~~~";
}
}
public class Student extends People{
}
@Override
public String writeMain() {
return "我的爸爸给我买文具~~~";
}
}
public class Test {
public static void main(String[] args) {
Student p1=new Student();
p1.write();
People p2=new Teacher();
p2.write();
}
}