在JAVA设计语言之中,抽象方法是一个重要的概念,抽象方法充当着占位的角色,它们具体实现在子类中,拓展抽象类中定义部分抽象类方法或不定义抽象类方法,这样就必须将子类也标记为抽象类,另一种是定义全部抽象方法,这样一来,子类就是非抽象的了,本实例子类均为非抽象子类。
主程序:
package AbstractClaass;
public class PersonTest
{
public static void main(String[] argus)
{
Person[] p = new Person[2];
p[0] = new Student("Joey Chao","automaticity");
p[1] = new CEO("Jack Ma",1000000000,1964,9,10);
for(Person r : p)
System.out.println(r.getName()+","+r.getDescription());
}
}
抽象类Person:
package AbstractClaass;
public abstract class Person
{
public abstract String getDescription();
private String name;
public Person(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
子类Student:
package AbstractClaass;
public class Student extends Person
{
private String major;
public Student(String name,String major)
{
super(name);
this.major =major;
}
public String getDescription()
{
return"A student majoring in "+major;
}
}
子类CEO:
package AbstractClaass;
import java.time.LocalDate;
public class CEO extends Person
{
private double salary;
private LocalDate hireDay;
public CEO(String name,double salary,int year,int month,int day)
{
super(name);
this.salary = salary;
hireDay = LocalDate.of(year, month, month);
}
public double getSalary()
{
return salary;
}
public LocalDate getHireDay()
{
return hireDay;
}
public String getDescription()
{
return String.format("An CEO with a salary of $%.2f", salary);
}
public void raiseSalary(double byPercent)
{
double raise = salary*byPercent/100;
salary += raise;
}
}
运行效果: