繼承(泛化):
語法:
<修飾符> 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);
}