抽象类
在介绍抽象类之前,我们先来看一段代码:
class Animal{
int age;
String name;
Animal(){} //Animal的构造函数
public void eatFood(){} //每个动物都有吃的食物
public void speaking(){} //每个动物都有它叫的声音
public void sleep(){ //每个动物都会睡觉,大多数都是闭眼睡觉
System.out.println("闭眼");
}
}
class Dog extends Animal{ //实现一个dog类继承Animal类
//实现父类Animal中eat()函数
public void eat(){//既是实现,也是重写
name="旺财";
System.out.println(name+"吃狗粮");
}
//实现父类Animal中speaking()函数
public void speaking(){
name = "旺财"
System.out.println(name+"汪汪的叫");
}
}
class Cat extends Animal{ //实现一个cat类继承Animal类
//实现父类Animal中eat()函数
void eat(){
name = "喵喵";
System.out.println("吃猫粮");
}
//实现父类Animal中speaking()函数
public void speaking(){
name = "喵喵"
System.out.println(name+"喵喵的叫");
}
}
我们发现在上面的Animal类中有两个方法eatFood方法和speaking方法,因为每个动物吃的食物和叫声是不一样的,所以他的函数具体是要由继承它的子类来实现,因此在父类中没有具体的方法体,但是还是会有方法体就是用{}括起来的部分,为了解决特殊情况,Java中使用抽象类来封装没有具体方法体的方法,
抽象类用关键字“abstract”修饰,即" abstract class 类名{ } ",其中抽象类中,我们可以将没有具体方法体的方法也定义成抽象的,如上面的eatFood方法和speaking方法我们可以这样定义:
public abstract void eatFood(); //每个动物都有吃的食物,不确定具体的方法体定义成抽象的方法体
public abstract void speaking(); //每个动物都有