/* File name : AbstractDemo.java */
public class AbstractDemo
{
public static void main(String [] args)
{
/*
1.抽象类 无法实例化
2.类的功能仍然存在,它的字段,方法和构造函数都以相同的方式进行访问。
你只是不能创建一个抽象类的实例
*/
// Employee emp = new Employee("George W.", "Houston, TX", 43);
Salary s = new Salary("张*", "大连设计城", 3, 3600.00);
s.mailCheck();
// private 实体变量只能在Salary中访问
// s.salary = 1900;
// Employee e = new Salary("李*", "大连高新区", 2, 2400.00);
// System.out.println(e instanceof Salary);
// System.out.println("\n Call mailCheck using Employee reference--");
// e.mailCheck();
}
}
/*使用关键字 abstract 来声明一个抽象类。
它出现在关键字 class 的前面*/
public abstract class Employee
{
private String name;
private String address;
private int number;
// 姓名 地址 员工编号
public Employee(String name, String address, int number)
{
System.out.println("构造一个员工");
this.name = name;
this.address = address;
this.number = number;
}
public double computePay()
{
System.out.println("Inside Employee computePay");
return 0.0;
}
public void mailCheck()
{
System.out.println("Employee工资检查邮件发给: " + this.name
+ " " + this.address);
}
public String toString()
{
return name + " " + address + " " + number;
}
public String getName()
{
return name;
}
public String getAddress()
{
return address;
}
public void setAddress(String newAddress)
{
address = newAddress;
}
public int getNumber()
{
return number;
}
public static void main(String[] args) {
}
/*
1.如果一个类中含有一个抽象方法,类必须也是抽象的。
抽象方法无需定义,并且它的签名以分号结束,不需要花括号
2.任何一个子类必须覆盖这个抽象方法,
或者继续将它声明为抽象方法。
3.抽象方法不能有方法体
*/
public abstract void travel();
}
/* File name : Salary.java */
public class Salary extends Employee
{
private double salary; //Annual salary
// 姓名 地址 员工编号 工资
public Salary(String name, String address, int number, double
salary)
{
super(name, address, number);
setSalary(salary);
}
public void mailCheck()
{
System.out.println("【Salary】工资检查邮件发给:" + getName()
+ " with salary " + this.salary);
}
public double getSalary()
{
return salary;
}
public void setSalary(double newSalary)
{
if(newSalary >= 0.0)
{
salary = newSalary;
}
}
public double computePay()
{
System.out.println("计算工资付给:" + getName());
return salary/52;
}
// // 抽象方法实现
public void travel(){
}
// 声明
// public abstract void travel();
}