关键字 abstract
1.抽象类
抽象类就是被abstract修饰的类,其最大的特点就是不能实例化对象,即不能创建对象。(抽象类和普通类的唯一区别就是不能创建对象)
public abstract class Animal {
private String name;
private int age;
public Animal() {
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void eat() {
System.out.println("动物进食");
}
}
class Test {
public static void main(String[] args) {
Animal animal = new Animal();//报错,原因为Animal无法被实例化
}
}
如上述代码所示,定义了一个抽象类Animal,在类中对姓名和年龄进行了封装,然后在Test中创建Animal类的实例报错,因此抽象类无法创建实例,其余和普通类相同,可以有属性,有方法。
2.抽象方法
抽象方法就是被abstract修饰的方法。(抽象方法是专门为多态设计的)
注意:(1)抽象方法必须定义在抽象类中
public class Animal {
public abstract void eat();//在普通类中定义抽象方法,报错
}
如上述代码所示,在普通类中定义一个抽象方法,发生报错。因此,抽象方法必须定义在抽象类中。
(2)抽象方法不能有方法实现
public abstract class Animal {
public abstract void eat(){};//在抽象方法中增加方法实现,报错
}
如上述代码所示,在一个抽象类中定义了一个抽象方法,且该抽象方法中添加了方法实现,发生报错。因此,在抽象方法中,不能有方法实现。
总结
1.抽象类属于类的设计层面上的问题。它是为了设计类而存在,不是为了创建对象而存在。它最佳的使用场景就是多态。
2.抽象类声明子类必须要实现的方法(即自身的抽象方法),子类根据自己特征实现父类中声明的抽象方法。在创建和使用对象的时候,借助多态,用父类引用指向子类对象。这样可以充分发挥多态的优势。