为什么需要抽象类:当父类的某些方法需要声明,但是又不知道如何去实现时,可以将其声明为抽象方法,有抽象方法的类必须声明为抽象类。
抽象类的注意事项和细节:
- 抽象类不能被实例化。因为若抽象类可以被实例化,那么其对象就能够访问抽象方法,但是抽象方法必须要被子类重写,这样就错了。故抽象类不能被实例化。
- 抽象类中不一定要包含抽象方法,这样做的目的可能是为了将该类作为其他类的基类,强调该类是一个抽象概念,不能被实例化。
- 一旦类中包含了抽象方法,则该类必须声明为抽象类。
- abstruct只能修饰类和方法,不能修饰属性和其他的。
- 抽象方法不能有主体,只能是这样的如:public abstract void eat();
- 如果一个类继承了抽象类,则该类重写类的所有抽象方法,除非它自己也声明为抽象类。
- 抽象不能使用private,final,static来修饰,因为这写关键字都是和重写相违背的。如:private,会导致抽象方法不能被子类访问,那就重写不了了,final,会导致不能重写,static,会导致抽象方法随着类的加载而执行,也是不对的。
代码:
//抽象的父类Animal
public abstract class Animal {
private String name;
public Animal() {
}
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void eat();//抽象方法eat
}
//子类Cat
public class Cat extends Animal {
@Override//重写父类的抽象方法eat
public void eat() {
System.out.println("猫喜欢吃鱼");
}
}
//子类Dog
public class Dog extends Animal{
@Override//重写父类的抽象方法eat
public void eat() {
System.out.println("狗喜欢吃骨头");
}
}
//测试类
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
cat.eat();
Dog dog = new Dog();
dog.eat();
}
}