抽象类和抽象方法
目录
抽象类:
抽象方法和抽象类的的定义格式:
抽象类和抽象方法的注意事项:
抽象类和抽象方法的意义:
抽象存在意义:
抽象方法:
从子类中抽取共性到父类后 方法不知道写什么方法体(由于每个子类执行的内容是不一样的 ,方法体无法确定)时,就把方法定义为抽象方法。
抽象类:
如果一个类中存在抽象方法,那么该类就必须声明为抽象类。
抽象方法和抽象类的的定义格式:
- 抽象方法定义格式:
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方法格式各不相同,在实际开发中,一个项目由多人开发,若不同子类有不同程序员编写,那么就有可能产生多种不同的格式,不方便管理,这时就体现了方法抽取的好处,我们可以强制子类必须按照这种格式来进行重写
因此可以总结抽象类的作用:
小陈学 java: 习题1是不是做错了?不应该是\\d嘛?\\w是单词字符啊,题目要求应该是数字把
小草202401016: 我来了韬韬
小草202401016: 好的韬韬
成果、: 多看看就懂了
太阳当 空赵: 看不懂(#-.-) ,老师给讲讲