目录
一、抽象类
当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法,这个方法就是抽象方法,用abstract来修饰该类就是抽象类。
public class Abstract01 {
public static void main(String[] args) {
}
}
//抽象类
abstract class Animal{
private String name;
public Animal(String name) {
this.name = name;
}
//抽象方法
public abstract void eat();
}
1、用abstract关键字来修饰一个类时,这个类就叫抽象类
格式: 访问修饰符 abstract 类名{}
2、用abstract关键字来修饰一个方法时,这个方法就是抽象方法。
格式:访问修饰符 abstract 返回类型 方法名(参数列表);//没有方法体;
3、抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类();
二、注意事项
1、抽象类不能被实例化。
2、抽象类不一定要包含abstract方法。也就是说抽象类可以没有abstract方法。
public class Abstract02 {
public static void main(String[] args) {
}
}
//抽象类
abstract class A{
//可以有实现方法
public void a(){
System.out.println("你好呀");
}
}
3、一旦类包含了abstract方法,则这个类必须声明为abstract。
4、abstract 只能修饰类和方法,不能修饰属性和其它的。
5、抽象类可以有任意成员【抽象类本质还是类】。
public class Abstract03 {
public static void main(String[] args) {
}
}
//抽象类
abstract class A01{
//普通属性
private int a = 10;
//静态属性
private static double b = 23;
//构造方法
public A01() {
}
//抽象方法
public abstract void a1();
//静态方法
public static void b1(){
}
}
6、抽象方法不能有主体。
7、如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类。
abstract class B{
public abstract void b();
}
abstract class C extends B{
}
class D extends B{
@Override
public void b() {
}
}
8、抽象方法不能使用private、final和 static来修饰,因为这些关键字都是和重写相违背的。
三、相关案例
编写一个Employee类,声明为抽象类,包含如下三个属性:name, id, salary.提供必要的构造器和抽象方法:work()。对于Manager类来说,他既是员工,还具有奖金(bonus)的属性。请使用继承的思想,设计CommonEmployee类和Manager类,要求类中提供必要的方法进行属性访问,实现work(),提示"经理/普通员工名字工作中..."。
abstract class Employee{
//name, id, salary
private String name;
private int id;
private double salary;
public Employee(String name, int id, double salary) {
this.name = name;
this.id = id;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public abstract void work();
}
public class Manager extends Employee {
private double bonus;
public Manager(String name, int id, double salary, double bonus) {
super(name, id, salary);
this.bonus = bonus;
}
@Override
public void work() {
System.out.println("经理" + getName() + "奖金" + bonus);
}
}
public class CommonEmployee extends Employee {
public CommonEmployee(String name, int id, double salary) {
super(name, id, salary);
}
@Override
public void work() {
System.out.println("普通员工:" + getName() +"在干活");
}
}
public class Abstract04 {
public static void main(String[] args) {
new Manager("老张",001,8000,1250).work();
new CommonEmployee("小李",002,6500).work();
}
}