抽象类的概述
父类当中的方法,被它的子类们重写,子类的各自实现又不一样.
那么父类的方法声明和方法体,只有声明还有意义,而方法体内容则没有存在的意义
这种没有方法体内容的方法称为抽象方法
Java 语法规定,如果一个类中包含了抽象方法,那么该类是一个抽象类;
抽象方法:没有方法体的方法
抽象类:包含抽象方法的类
使用 abstract 关键字修饰成员方法,该方法就成了抽象方法,
抽象方法只包含一个方法名,没有方法体
修饰符 abstract 返回值类型 方法名(参数列表);
public abstract void run();
1.不能直接创建 new 抽象类对象
2.必须用一个子类来继承抽象方法
3.子类必须重写抽象父类当中的所有抽象方法
4.重写实现:子类重写父类当中的抽象方法,去掉抽象方法当中的 abstract 关键字,然后添加方法体大括号
5.创建子类对象进行使用
6.方法重写,是子类对父类的抽象方法的完全实现,我们将这种方法重写操作 , 叫做 [ 实现方法 ]
定义一个类是员工,员工有id和name属性, 有一个方法是eat,调用eat()方法员工输出吃饭, 有一个方法是work,
不同的员工工作的内容不同,定义三个类,程序员,老师,网管, 分别调用work的时候输出"id为xx的name写代码",“讲课”,
“拉网线”。 要求:使用抽象类实现以上功能。
抽象类实现
员工类
package com.homework;
// 定义一个员工类
public abstract class Employee {
// 属性私有化
private int id;
private String name;
//提供公共的成员方法setXxx和getXxx方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// eat方法 输出吃饭 成员方法
public void eat() {
System.out.println( name + "员工在吃饭...");
}
// work方法 抽象方法
public abstract void work();
}
程序员类
package com.homework;
public class Programmer extends Employee {
// 工作
@Override
public void work() {
//"id为xx的name写代码"
System.out.println("id为" + super.getId() + "的" + super.getName() + "写代码");
}
}
网管类
package com.homework;
// 定义一个网管类
public class WebMaster extends Employee {
@Override
public void work() {
System.out.println("id为" + super.getId() + "的" + super.getName() + "拉网线");
}
}
老师类
package com.homework;
//定义一个老师类
public class Teacher extends Employee {
// 工作
@Override
public void work() {
System.out.println("id为" + super.getId() + "的" + super.getName() + "讲课");
}
}
测试类
package com.homework;
// 测试类
public class TestEmployee {
public static void main(String[] args) {
// 构建三个员工类对象
Programmer p = new Programmer();
p.setId(1);
p.setName("张三");
Teacher t = new Teacher();
t.setId(2);
t.setName("李四");
WebMaster w = new WebMaster();
w.setId(3);
w.setName("王五");
// 调用eat方法 和work方法
p.eat();
p.work();
t.eat();
t.work();
w.eat();
w.work();
}
}