目录
抽象存在意义:
从子类中抽取共性到父类后 方法不知道写什么方法体(由于每个子类执行的内容是不一样的 ,方法体无法确定)时,就把方法定义为抽象方法。
如果一个类中存在抽象方法,那么该类就必须声明为抽象类。
public abstract 返回值类型 方法名(参数列表);
public abstract class 类名{}
要么重写抽象类中的所有抽象方法(常用)
要么子类本身是抽象类(如果把子类也设为抽象类,那么只能通过 创建“孙类”来实例化)
除这两种情况,否则报错
第三点我们可能有一个疑问:
抽象类不是不可以创建对象吗,那为什么还需要构造方法?
答:因为我们还需要创建抽象类的子类,子类需要调用父类的构造方法,从而当创建子类对象时,可给属性赋值。所以抽象类中的构造方法是为子类对象服务的。
可以由下面疑问因为引出:
如下:
public class Person{
//只写属性,构造,set get,不将子类共性方法提取;
}
// 子类Student
class Student{
public void eat(String something){
System.out.println("吃"+something)
}
}
// 子类Teacher
class Teacher{
public void eat(){
System.out.println("老师吃食堂")
}
}
由上面代码可以看出,子类的eat方法格式各不相同,在实际开发中,一个项目由多人开发,若不同子类有不同程序员编写,那么就有可能产生多种不同的格式,不方便管理,这时就体现了方法抽取的好处,我们可以强制子类必须按照这种格式来进行重写
因此可以总结抽象类的作用: