Java抽象

2016-01-12  本文已影响0人  凹特曼
/* 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();

}
上一篇 下一篇

猜你喜欢

热点阅读