抽象(abstract)类
抽象:反义词是具体,不清楚不确定
抽象的由来
多个类不断向上抽取,在多个类中的功能是具体的是明确的,但是抽取到父类中之后该功能就不明确了
例如:一个三角形计算面积可以具体实现,一个圆形计算面积也可以具体实现,他们两个都有计算面积的方法这时共性内容不断向上抽取,形成以个父类,父类中的计算面积犯法就是无法明确如何实现/
抽象类:使用abstract关键字修饰的类
如果一个类中有抽象方法,呢么这个类必须是抽象类
格式:
//抽象类:
public astract class 类名{
//抽象 方法
public abstract 返回值类型,方法名(参数列表);
}
抽象类的特点:
(1)抽象类和抽象方法都必须使用abstract关键字修饰
(2)不能创建对象
(3)一个类去继承抽象类,要么实现所有的抽象方法。
要么该类必须也是一个抽象类
(4)抽象类的构造方法
构造方法两个作用:
a:创建对象
b.给成员变量初始化
(5)类也抽象之间的关系是继承
(6)抽象类中可以有抽象方法也可以没有抽象方法
抽象类中可以非抽象的方法
*练习:
/*老师类:
属性:姓名,年龄,性别
行为:讲课,吃饭
基础班老师:
属性:姓名,年龄,性别
行为:讲基础班课程,吃饭
就业班老师:
属性:姓名,年龄,性别
行为:讲就业班课程,吃饭
定义测试类:
分别创建基础班老师对象和就业班老师对象
调用各自的讲课方法
要求:
分析各个事物之间的继承关系,抽取出相关的类*/
public abstract class Teacher {
private String name;
private int age;
private String sex;
public Teacher() {
}
public Teacher(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public void eat() {
System.out.println("吃法~");
}
public abstract void teach();
}
class BaseTeacher extends Teacher {
public BaseTeacher() {
}
public BaseTeacher(String name, int age, String sex) {
super(name, age, sex);
}
public void teach() {
System.out.println(getName()+"年龄"+getAge()+","+getSex()+","+"讲基础班课程");
}
}
class JobTeacher extends Teacher {
public JobTeacher() {
}
public JobTeacher(String name, int age, String sex) {
super(name, age, sex);
}
public void teach() {
System.out.println(getName()+"年龄"+getAge()+","+getSex()+","+"讲就业班课程");
}
}
class Test {
public static void main(String[] args) {
BaseTeacher baseTeacher = new BaseTeacher(“基础班老师”, 20, “男”);
JobTeacher jobTeacher = new JobTeacher(“就业班老师”, 25, “男”);
baseTeacher.teach();
jobTeacher.teach();
}
}