目录
抽象类
概述:在java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
抽象类的特点:
抽象类和抽象方法必须使用abstract关键字修饰,修饰一个类放在class前面,修饰一个方法,一般是放在权限修饰符的后面,格式如下
public abstract class 类名{
}//抽象类的写法
public abstract void eat();//抽象方法的写法
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类,具体类中不能有抽象方法
抽象类不能实例化,参照多态的形式,对子类对象实例化,这叫抽象类多态
抽象类的子类,要么重写抽象类中所有的抽象方法,要么是抽象类
抽象类的成员特点:
成员变量,可以是变量也可以是常量
构造方法,有构造方法,但是不能实例化,构造方法的作用用于子类方法父类数据的初始化
成员方法,可以有抽象方法,限定子类必须完成某些动作,也可以有非抽象方法,提高代码的复用性
抽象类的关键字abstract和不能和哪些关键字共存:
//abstract可以和public关键字共存
public abstract void show();
//private和abstract关键字冲突
private abstract void show2();
// java: 非法的修饰符组合: abstract和private
//static和abstract关键字冲突
static abstract void show3();
// java: 非法的修饰符组合: abstract和static
//final和abstract关键字冲突
final abstract void show4();
// java: 非法的修饰符组合: abstract和final
下面我们用抽象类去写一个案例:
/*
抽象类改进猫狗案例
*/
abstract class Animal{
//定义一个吃饭的抽象方法,不给出具体的实现
public abstract void eat();
//定义一个睡觉的抽象方法,不给出具体的实现
public abstract void sleep();
}
class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗吃肉");
}
@Override
public void sleep() {
System.out.println("狗侧着睡");
}
}
class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
@Override
public void sleep() {
System.out.println("猫趴着睡");
}
}
public class AbstractDemo {
public static void main(String[] args) {
//抽象多态创建一个对象
Animal a = new Dog();
a.eat();
a.sleep();
//抽象多态创建第二个对象
Animal c = new Cat();
c.eat();
c.sleep();
}
}