1.为什么要有抽象类
class Animal {
public void fly() {
System.out.println("动物飞翔");
}
}
class Bird extends Animal {
public void fly() {
System.out.println("小鸟在飞翔");
}
}
public class AbstractDemo1 {
public static void main(String[] args) {
Bird bird = new Bird();
bird.fly();
}
}
在上面的代码中,我们在父类中定义了一个 fly 方法,而子类中又重写了这个方法,最终输出的结果也是子类中重写后的结果,那么说明父类中的这个方法是否实现对于子类来说毫无意义,既然父类中的方法没有实现的意义,那么我们就可以只需要父类中声明这个方法而无需去实现,这个时候就需要使用抽象类了
2.如何使用抽象类
对于如何使用抽象类,我们需 abstract 使用这个关键字来修饰方法,被 abstract 这个关键字修饰的方法就叫抽象类
抽象类是只有方法的声明,而没有方法的实现,而在一个类中出现抽象方法后,这个类也只能被 abstract 关键字修饰,即这个类只能是抽象类
abstract class Animal {
public abstract void fly();
}
class Bird extends Animal {
public void fly() {
System.out.println("小鸟在飞翔");
}
@Override
public void eat() {
}
}
abstract class Dog extends Animal {
@Override
public void fly() {
}
}
上述代码中, 由于 Dog 没有实现完父类中的所有方法,因此只能是一个抽象类
3.抽象类的特点
1.抽象类中可以有抽象方法,也可以有非抽象方法
abstract class Animal {
public abstract void fly();
public abstract void eat();
public void print(){
}
}
2.抽象类中是可以有构造方法的
abstract class Animal {
public Animal() {
}
public abstract void fly();
public abstract void eat();
public void print(){
}
}
3.抽象类不能直接实例化
abstract class Animal {
}
public class AbstractDemo1 {
public static void main(String[] args) {
new Animal(); //报错,提示不能实例化抽象类
}
}
4.抽象类中可以声明属性
abstract class Animal {
String name;
}
4.抽象类的作用
抽象类的作用是来规范子类的方法声明,定义抽象类后,就需要有子类,即继承
5.面试题:抽象类可以被 final 关键字修饰吗?
不可以
原因:被 final 关键字修饰的类不能有子类,也就是不能被继承;而抽象类必须有子类,也就是说有继承发生,他们是对立的,不能并存,因此 final 不能修饰抽象类