/*
* 抽象类的特点:
* 1. 抽象类和抽象方法都需要被abstract修饰,抽象方法一定要定义在抽象类中。
* 2. 抽象类不可以创建实例
* 3. 子类只有覆盖了抽象类中所有的抽象方法后,才能实例化,否则该子类还是一个抽象类
*
* 【细节问题】
* 1. 抽象类是否有构造函数?
* 答:有,虽然自己不能创建对象,但是可以给自己的子类对象初始化。
*
* 2. 抽象类和普通类的不同点?
* 答:①抽象描述事物不具体,②抽象类不可以创建对象,③抽象类可以定义抽象函数
*
* 3. 抽象关键字abstract不可以和哪些关键字共存?
* 答:①final:因为抽象类可以有子类,抽象方法、属性可以被覆盖,而final修饰的不可以
* ②private:抽象类成员可以被子类覆盖,私有化就不能覆盖了
* ③static:类名即可调用静态的成员,对于抽象类来说没意义
* */
abstract class Cats{ //猫科类
int legNum;
String color;
public Cats(int legNum,String color){
this.legNum = legNum;
this.color = color;
}
abstract void eat(); //猫科都有吃的行为
}
class PetCat extends Cats{
public PetCat(int legNum,String color){
super(legNum,color); //使用抽象父类的构造函数
}
void show(){
System.out.println("腿有"+this.legNum+",毛色是"+this.color);
}
void eat(){ //覆盖抽象父类的抽象方法
System.out.println("宠物猫吃猫粮");
}
}
class Tiger extends Cats{
public Tiger(int legNum,String color){
super(legNum,color);
}
void eat(){
System.out.println("老虎吃肉");
}
}
public class abstractDemo {
public static void main(String[] args){
PetCat xiaohuang = new PetCat(4,"yellow");
xiaohuang.show();
xiaohuang.eat();
/*输出结果*/
//腿有4,毛色是yellow
//腿有4,毛色是yellow
}
}
转载于:https://my.oschina.net/daladida/blog/917681