Java-9 繼承、封裝、多態

繼承(泛化):
    語法:
        <修飾符> class 子類名(派生類)   extends 父類名(超類、基類)
        {

        }

    作用:
        1.複用父類的所有非private屬性與方法
        2.擴充自己的屬性或方法

    注意:
       1.只允許單繼承
          public class Worker extends Employee{}
       2.允許變相"多繼承"
          public class Worker extends Employee{}
          public class Officer extends Worker{}

    此時,Officer可以複用Worker、Employee中所有的非private屬性與方法

       3.Object是所有類的超級父類
       4.一個子類只允許有一個父類,一個父類可以有多個子類
       5.子類可以複用父類所有的非private的屬性與方法

  子類實例化過程:
       先實例化父類,再實例化子類

super():
      作用:調用父類構造器
 注意:
     1.必須放在子類構造器,且放在第一行
     2.如果子類構造器沒有顯示聲明super(),編譯器默認添加在第一行super()
        如果父類中沒有無參構造器,編譯器報錯
     3.super()中的參數決定調用父類的哪一個構造器

this():
    作用:調用本類的構造器

注意:
    只能寫在構造器的第一行

super: 
    作用:表示父類的引用

this:
    作用:表示本類的引用

/**
 *  封裝:隱藏屬性、方法或實現細節的過程稱爲封裝
 *      
 *      特點:
 *        1.屬性私有化,用private修飾
 *        2.對外提供公有的get或set方法訪問屬性
 *      
 *      作用:
 *          1.隱藏類的實現細節
 *          2.讓使用者只能通過事先定製好的方法來訪問數據,可以方便地加入控制邏輯,限制對屬性的不合理操作
            3.對數據進行檢查

      訪問權限修飾符: public protected (default) private

                        類修飾符: public  (default)
                        類成員修飾符: public protected (default) private

                       訪問權限範圍: public >  protected  >  (default) > private

     public:     同類、同包、不同包子類、不同包
     protected:  同類、同包、不同包子類
     (dafault):  同類、同包
     private:    同類 
  */

private int empno;
private String ename;
private double salary;

//set方法:賦值、傳值
public void setEmpno(int empno)
{
    this.empno = empno;
}
//get方法:取值
public int getEmpno()
{
    return empno;
}
//set方法:賦值、傳值
public void setEname(String ename)
{
    //3.對數據進行檢查
    if(ename == null || "".equals(ename))
    {
        System.out.println("僱員姓名不能爲空");
        return;
    }
    this.ename = ename;
}
//get方法:取值
public String getEname()
{
    return ename;
}
//set方法:賦值、傳值
public void setSalary(double salary)
{
    //2.讓使用者只能通過事先定製好的方法來訪問數據,可以方便地加入控制邏輯,限制對屬性的不合理操作
    if(salary < 1600)
    {
        System.out.println("您賦予的薪資不能低於最低薪資水平1600");
        return;
    }
    this.salary = salary;
}
//get方法:取值
public double getSalary()
{
    //1.隱藏類的實現細節
    return calTotalSal();
}
/**
 * 薪資覈算的方法
 * @return
 */
private double calTotalSal()
{
    //薪水計算公式
    double totalSal = salary + (1000 + 1000*0.2 + 500);
    return totalSal;
}

/**
 *      多態:
 *          通過同一引用,調用同一方法,實現不同的功能
 * 
 *      多態三要素:
 *          1.基於繼承或實現
 *          2.重寫父類方法
 *          3.上溯造型(向上造型,子類轉換父類)
 *          
 *          
 *  在停車場收費系統中,收費者會根據車型的不同收取不同的停車費,其中,
            客車:15元/小時
            貨車:12元/小時
            轎車:8元/小時
            編寫java程序完成此功能

 */

/*
 * 交通工具父類
 */
public class Vehicle {

/**
 * @param hour 停車時間(單位/小時)
 */
public void payFee(int hour)
{       }
}


/**
 * 客車:15元/小時
 */
public class Bus extends Vehicle {

//重寫/覆蓋
@Override   
public void payFee(int hour) {

    System.out.println("客車繳費(15元/小時): " + (15*hour));

}
}


/**
 * 轎車:8元/小時
 */
public class Car extends Vehicle {

//重寫/覆蓋
@Override   
public void payFee(int hour) {

    System.out.println("轎車繳費(8元/小時): " + (8*hour));

}
}



/**
 * 貨車:12元/小時
 */
public class Truck extends Vehicle {

//重寫/覆蓋
@Override   
public void payFee(int hour) {

    System.out.println("貨車繳費(12元/小時): " + (12*hour));

}
}

    /**
     * 收費
     */
    public void chargeFee(Vehicle v,int hour)
    {
        v.payFee(hour);
    }

public static void main(String[] args) {
    //創建停車場
    Parker parker = new Parker();

    //停車場收費
    parker.chargeFee(new Bus(), 3);
    parker.chargeFee(new Truck(), 1);
    parker.chargeFee(new Car(), 5);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章