前言:
在前面已经又博文介绍过 继承 相关的知识,抽象类可以说是在继承基础上的进一步深化。
通过继承,我们了解到:
1、多个子类中拥有相同的方法:将其提取到父类中,再继承即可。
2、多个子类的方法 各不相同: 各自处理,不要在父类中放。
那么: 多个子类的方法 方法名(方法标签)相同,但方法体不同,有什么更好的方法进行处理吗?
答案是有的: 抽象方法。
继承:继承不了解的可以戳我哦
抽象方法与抽象类:
在说抽象类之前先来介绍一下 抽象方法,以及什么时候更好的选择用抽象方法。
介绍之前先看一段代码:
Pet.java (父类):
package pat;
public class Pet {
private String name;
private int love;
private int health;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
}
Dog.java(子类):
package pat;
public class Dog extends Pet{
private String Strain;
public String getStrain() {
return Strain;
}
public void setStrain(String strain) {
Strain = strain;
}
public void print() {
System.out.println(getName() + " " + getLove() + " " + getHealth() +
" " + this.Strain);
}
}
Cat.java(子类):
package pat;
public class Cat extends Pet{
private String sex;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public void print() {
System.out.println(getName() + " " + getLove() + " " + getHealth() +
" " + this.sex);
}
}
通过上面的代码我们可以发现,在两个子类中就有我们前言中提到的问题:
看一下 print() 方法, 两个子类中 方法名相同,但是方法里面的内容有所不同。
这个时候就可以用抽象方法啦,具体实现如下:
抽象方法必须在抽象类中进行定义,所以在写抽象方法时必须是一个抽象类,但抽象类中可以没有抽象方法。
抽象类中可以有抽象方法也可以有普通方法.
package pat;
public abstract class Pet {
private String name;
private int love;
private int health;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public abstract void print();
}
子类要继承父类就必须要重写父类中的抽象方法,即将 父类中的抽象方法进行实现,也可以不实现,但
必须要有,这样的好处是什么呢?
相当于老总给两个人分配了一个任务,只说了题目,剩下的你就可以自由发挥啦。
在实际开发项目中,肯定是先有一个大致的框架,然后再进行慢慢实现(个人理解)。
抽象类不能进行实例化:
有两个原因:
1、语法要求,当你进行实例化时,是会报错的。
2、实例化没有太大的意义,抽象类中的抽象方法是没有内容的,实例化所调用的抽象方法没有内容
那调用它做什么呢,你可能会想,那普通方法呢?抽象类一般用于继承中,子类既然继承父类啦,
父类的方法子类就可以直接用啦,只要我的儿子可以好,我累点我所谓(可怜天下父母心)。