1.抽象类不能被实例化。
2.抽象类中可以没有抽象方法。
3.抽象类中的抽象方法必须被该抽象类的子类实现。
4.有抽象方法的类必须被声明为抽象类。
package abstractClasses;
abstract class Person {
private String name;
public abstract String getDescription();
public Person(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
package abstractClasses;
import java.time.LocalDate;
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;
this.hireDay = LocalDate.of(year, month, day);
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public LocalDate getHireDay() {
return hireDay;
}
public void setHireDay(LocalDate hireDay) {
this.hireDay = hireDay;
}
@Override
public String getDescription() {
// TODO Auto-generated method stub
return String.format("an employee with a salary of $%.2f", this.salary);
}
public void raiseSalary(double byPercent) {
double raise = this.salary * byPercent/100;
this.salary += raise;
}
}
package abstractClasses;
class Student extends Person {
private String major;
public Student(String name, String major) {
super(name);
this.major = major;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
@Override
public String getDescription() {
// TODO Auto-generated method stub
return "a student majoring in"+this.major;
}
}
package abstractClasses;
class PersonTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person[] persons = new Person[2];
persons[0] = new Employee("li hua", 10000, 2018, 7, 21);
persons[1] = new Student("zhao lei", "SoftWare");
for(Person p : persons) {
System.out.println(p.getName()+","+p.getDescription());
}
}
}