抽象类
抽象类定义:一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
抽象类的定义:
public abstract class 类名 {}
抽象方法的定义:
public abstract void eat();
注意:抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类;抽象类不能实例化。
抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态。
继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类必须声明为抽象类。最终,必须有子类实现该父类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象从而失去意义。
修饰符必须为public或者protected,不能为private,因为创建了抽象类,就要被其他类继承,设为private就无法被继承
抽象类不能被实例化,只能通过普通子类来实现实例化
如果一个普通子类继承于抽象父类,则该类一定要重写实现该父类的抽象方法,如果子类仍然的hi一个抽象类,也是允许的,就不必冲写父类的抽象方法,但必须用abstract修饰
抽象级别:抽象类是对整体类的抽象,包括属性和方法
抽象类是现有子类,将子类的共同属性和方法提取出来放在抽象类中,是一种从下往上的构建法则
父类包含了子类集合的常见方法,但由于父类本身是抽象的,不能使用这些方法。
抽象方法特点:
抽象方法中没有方法体
抽象方法必须存在于抽象类中
子类重写父类时,必须重写父类的所有抽象方法
抽象方法不能使用private final static 来修饰,因为这些关键字都是和重写违背的
抽象类例子:
先声明一个Cat类,类中有睡觉这一行为
public class Cat{
public void sleep(){
System.out.println("我在睡觉");
}
}
再声明一个Dog类,类中也有睡觉这一行为
public class Dog{
public void sleep(){
System.out.println("我在睡觉");
}
}
这里的Dog和Cat都有共同的行为sleep();
但这时给Dog和Cat添加一个eat()的行为,不同的是,Dog吃的是骨头,Cat吃的是鱼,相同点是都是eat()这个行为,不同点是吃的食物不同,就可以将Dog和Cat作为子类,抽象出eat()这个行为作为抽象方法放在父类中,再在子类重写父类方法来调用实现吃不同的食物。