Java中抽象类的存在有什么意义 为什么要有抽象类

视频加载中...

1.抽象类1.1.抽象类的概念
1.1.1.抽象的产生
需求:创建类描述猫和狗;
猫:颜色;名字;品种; 吃;叫;抓老鼠;
狗:颜色;名字;品种; 吃;叫;看家;
老的实现方式:
//创建类描述狗
classDog{
privateStringcolor;//颜色
privateStringname;//name
privateStringpinZhong;//品种
publicDog() {}
publicDog(Stringcolor, Stringname, StringpinZhong) {
this.color=color;
this.name=name;
this.pinZhong=pinZhong;
}
publicString getColor() {
return color;
}
public voidsetColor(Stringcolor) {
this.color=color;
}
publicString getName() {
return name;
}
public voidsetName(Stringname) {
this.name=name;
}
publicString getPinZhong() {
return pinZhong;
}
public voidsetPinZhong(StringpinZhong) {
this.pinZhong=pinZhong;
}
//吃
public voideat() {
System.out.println("吃骨头!");
}
//叫
public voidsay() {
System.out.println("汪汪");
}
//看家
public voidlookHome() {
System.out.println("看家");
}
}
//创建类描述猫
classCat{
privateStringcolor;//颜色
privateStringname;//名字
privateStringpinZhong;//品种
publicCat() {}
publicCat(Stringcolor, Stringname, StringpinZhong) {
this.color=color;
this.name=name;
this.pinZhong=pinZhong;
}
publicString getColor() {
return color;
}
public voidsetColor(Stringcolor) {
this.color=color;
}
publicString getName() {
return name;
}
public voidsetName(Stringname) {
this.name=name;
}
publicString getPinZhong() {
return pinZhong;
}
public voidsetPinZhong(StringpinZhong) {
this.pinZhong=pinZhong;
}
//猫的吃
public voideat() {
System.out.println("吃小鱼!");
}
//猫的叫
public voidsay() {
System.out.println("喵喵喵");
}
//抓老鼠
public voidcatchMouse() {
System.out.println("抓老鼠");
}
}
思考:这两个类中存在大量相同代码,每个类都要重新书写一遍,太麻烦 。可以考虑使用继承技术来简化代码;
因为猫和狗之间没有 是 的关系,所以不能相互继承;
所以要找一个共同的父类,将猫和狗的共同代码都抽取到父类中;
因为猫和狗都 是 动物,所以可以定义一个动物类,将相同代码抽取到动物类中,然后让猫和狗都继承这个动物类;
/*
*需求:创建类描述猫和狗;
猫:颜色;名字;品种; 吃;叫;抓老鼠;
狗:颜色;名字;品种; 吃;叫;看家;
*/
//创建一个共同的父类动物
abstract classAnimal{
【Java中抽象类的存在有什么意义 为什么要有抽象类】privateStringcolor;//颜色
privateStringname;//name
privateStringpinZhong;//品种
publicAnimal() {}
publicAnimal(Stringcolor, Stringname, StringpinZhong) {
this.color=color;
this.name=name;
this.pinZhong=pinZhong;
}
publicString getColor() {
return color;
}
public voidsetColor(Stringcolor) {
this.color=color;
}
publicString getName() {
return name;
}
public voidsetName(Stringname) {
this.name=name;
}
publicString getPinZhong() {
return pinZhong;
}
public voidsetPinZhong(StringpinZhong) {
this.pinZhong=pinZhong;
}
//吃
public abstract voideat();
//叫
public abstract voidsay();
}
//创建类描述狗
classDogextendsAnimal{
publicDog() {}
publicDog(Stringcolor, Stringname, StringpinZhong) {
super(color,name,pinZhong);
}
//吃
public voideat() {
System.out.println("吃骨头!");
}
//叫
public voidsay() {
System.out.println("汪汪");
}
//看家
public voidlookHome() {
System.out.println("看家");
}
}
//创建类描述猫
classCatextendsAnimal{
publicCat() {}
publicCat(Stringcolor, Stringname, StringpinZhong) {
super(color,name,pinZhong);
}
//猫的吃
public voideat() {
System.out.println("吃小鱼!");
}
//猫的叫
public voidsay() {
System.out.println("喵喵喵");
}
//抓老鼠
public voidcatchMouse() {
System.out.println("抓老鼠");
}
}
新的问题:
在不同的子类中有相同的方法,但是方法的具体实现不同;因为是相同的方法,是共有的功能,所以应该抽取到共同的父类中;