一.抽象类的概述及特点
- 抽象类的概述:将功能定义为抽象的,那么该类就是抽象类
- abstract关键字:抽象
抽象类的特点:
抽象类和抽象方法必须用abstract关键字修饰
格式:
abstract class A{}
public abstrsct void show();抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
- 抽象类不能实例化
抽象类子类的特点:
- 子类可以是抽象类(无任何意义)
- 子类是非抽象类,必须要重写父类中的抽象方法,然后去使用子类的自己的功能
抽象类的成员特点:
- 成员变量:可以是变量,也可以是常量
- 成员方法:可以是抽象方法,也可以是非抽象方法
- 构造方法:有构造方法,但是不能实例化(用于子类访问父类数据的初始化)
抽象类不可和以下关键字共存
private 冲突
final 冲突
static 无意义
二.抽象类的练习
- 假如我们在开发一个系统时需要对员工类进行设计,程序员包含3个属性:姓名、工号以及工资。
经理也是员工,除了含有程序员的属性外,另为还有一个奖金属性。
请使用继承的思想设计出程序员类和经理类。要求类中提供必要的方法进行属性访问。
员工抽象类:
//员工抽象类
public abstract class Employee{
//成员变量
private String name;
private String employeeId;
private int selary;
//无参构造方法
public Employee() {
}
//有参构造方法
public Employee(String name, String employeeId, int selary) {
super();
this.name = name;
this.employeeId = employeeId;
this.selary = selary;
}
//提供公共的访问方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmployeeId() {
return employeeId;
}
public void setEmployeeId(String employeeId) {
this.employeeId = employeeId;
}
public int getSelary() {
return selary;
}
public void setSelary(int selary) {
this.selary = selary;
}
//抽象方法
public abstract void work();
}
程序员类:
public class Programmer extends Employee{
public Programmer() {
super();
}
public Programmer(String name, String employeeId, int selary) {
super(name, employeeId, selary);
}
public void work(){
System.out.println("敲代码");
}
}
经理类:
public class Manager extends Employee{
//成员变量bonus
private int bonus;
public int getBonus() {
return bonus;
}
public void setBonus(int bonus) {
this.bonus = bonus;
}
public Manager() {
}
public Manager(String name, String employeeId, int selary,int bonus) {
super(name, employeeId, selary);
this.bonus = bonus;
}
public void work(){
System.out.println("和客户交流");
}
}
测试类:
public class Test {
public static void main(String[] args){
Employee a = new Programmer("王一","12345",5000);
a.work();
System.out.println(a.getName()+","+a.getEmployeeId()+","+a.getSelary());
System.out.println("--------------------");
Employee b = new Manager("王二","12346",5000,2000);
b.work();
System.out.println(b.getName()+","+b.getEmployeeId()+","+b.getSelary());
System.out.println("--------------------");
}
}