1.抽象方法和抽象类必须使用abstract修饰符修饰,有抽象方法的类只能被定义成抽象类(即方法修饰词为abstract时,类修饰词也必须为abstract),抽象类里可以没有抽象方法。
抽象方法和抽象类的规则:
1)抽象类和抽象方法必须使用abstract修饰,抽象方法不能有方法体。 抽象方法的定义,在方法前增加abstract修饰,再去掉方法体,并在方法后面增加分号。
2)抽象类不能被实例化。
3)抽象类可以包含成员变量,方法(普通方法和抽象方法都可以),构造器,初始化块,内部类(接口、枚举)。抽象类的构造器不能创建该类实例,主要是为了让子类调用。
4)含有抽象方法的类(定义了一个抽象方法;或继承了一个抽象父类,但没有完全实现父类包含的抽象方法;或实现了一个接口,但没有完全实现接口包含的抽象方法的三种情况)只能被定义为抽象类。
注: public abstract String getDescription();--------是一个抽象方法; public String getDescription(){}---------------------是一个普通方法。
public abstract class Person {//定义一个抽象类
public abstract String getDescription();//定义一个抽象方法
private String name;
public Person(String name) {//定义一个构造器,提供给子类调用
this.name = name;
}
public String getName() {
return name;
}
}
import java.time.*;
public class employee extends Person {//继承父类 由于声明是普通类,因次需要实现父类的全部抽象方
private double salary;
private LocalDate hireDay;
public employee(String name, double salary, int year, int month, int day) {
super(name);//调用父类构造器
this.salary = salary;
hireDay = LocalDate.of(year, month, day);
}
public double getsalary() {
return salary;
}
public LocalDate getHireDay() {
return hireDay;
}
public String getDescription() { // 重写父类的抽象函数
return String.format("an employee with a salary of $%.2f", salary);
}
public void saiseSalary(double byPercent) {
double raise = salary * byPercent;
salary += raise;
}
}
5.当使用abstract修饰类时,表明这个类只能被继承;当使用abstract修饰方法时,表明这个方法必须由子类提供实现(重写)。而final修饰的类不能被继承,final修饰的方法也不能被重写,因此abstract和final不能同时使用。
6.1)abstract不能修饰成员变量,也不能修饰局部变量,以及构造器;
2)abstract不能修饰类方法,即不能和static放在一起。
3)abstract修饰的方法必须由子类重写才有意义,因此abstract不能和private同时修饰。
7.父类中可能包含需要调用其它系列方法的方法,这些被调方法即可以由父类实现,也可以由子类实现。父类提供的方法只是定义了一个通用算法,其实现也许并不完全由自身实现,而必须依赖其子类的辅助