final 關鍵字
最終修飾符 可以修飾 類 方法 變數
被final修飾后不能被繼承 重寫 二次賦值
修飾類時 該類不可以被繼承
修飾方法時 該方法不能被重寫
修飾變數時, 該變數只能賦值一次, 不可以二次賦值 是常量
修飾參考變數時, 地址值不能改變 但物件中的屬性值可以改變
修飾成員變數時, 必須在類中顯性賦值 或 在所有構造方法中對其賦值
介面
介面是功能的集合 描述的是功能 介面中都是抽象方法(JDK1.8之前)
定義格式
public interface 介面名{
抽象方法;
}
介面的使用
1.介面不能創建物件
2.使用類實作介面
3.重寫抽象方法
4.創建實作類物件 呼叫方法
實作的動作類似繼承 就是關鍵字不同
public class 類 implements 介面{
重寫方法
}
介面的成員特點
介面沒有構造方法
介面中的成員變數 被public static final修飾 是常量
介面中的成員方法 被public abstract修飾
介面的特點
類與類 單繼承
類與介面 多實作
介面與介面 多繼承
類可以在繼承一個類的同時 實作多個介面
介面與抽象類的區別
成員區別
構造方法
介面沒有構造方法
抽象類有構造方法 給子類使用
成員變數
介面沒有變數 只有常量
抽象類既可以有變數 也可以有常量
成員方法
介面中的方法都是抽象的
抽象類中 既可以有抽象方法 也可以有具體的方法
思想的區別
抽象類描述的是一類事物的共性內容
介面描述的是功能
多型
多型的前提
1.繼承或者是實作關系
2.需要有方法重寫
多型的格式
父類參考指向子類物件
具體類 變數 = new 子類物件();
抽象類 變數 = new 子類物件();
介面 變數 = new 實作類物件();
多型后訪問的成員特點
成員變數
編譯時 到父類中找 如果有編譯通過 沒有報錯
運行時 列印的父類成員變數的值
編譯時 看左邊
運行時 看左邊
成員方法
編譯時 到父類中找 如果有編譯通過 沒有報錯
運行時 子類重寫后的方法
編譯時 看左邊
運行時 看右邊
多型后 一切都是父類的表現形式 只有方法運行的子類重寫后的方法.
向上轉型和向下轉型
// 向上轉型
// 多型本身就是向上轉型
Fu fz = new Zi();
// 向下轉型
// 向上轉型后 不能訪問子類特有功能
// 要想訪問 需要向下轉型
Zi zf = (Zi)fz;
// 需要注意
Fu fu = new fu();
Zi zi = (Zi)fu; //拋運行時例外 ClassCastException 型別轉換例外
instanceof關鍵字
判斷某個物件是否屬于某種型別 是回傳true, 否回傳false
boolean b = 物件 instanceof 型別;
if(物件 instanceof 型別){}
練習
員工類
屬性
id
name
基本工資
行為
計算工資 抽象
經理類
屬性
id
name
基本工資
管理工資
行為
計算工資 基本工資+管理工資
程式員
屬性
id
name
基本工資
專案獎金
行為
計算工資 基本工資+專案獎金
公司類
行為
查看員工工資(員工){
員工的工號:38250
員工的姓名:柳巖
員工的職位:經理
員工的工資:11111.00
}
練習
// Employee.java
public abstract class Employee {
String id;
String name;
private double salary;
public Employee() {
}
public Employee(String id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
public abstract double calculateSalary();
public String getName() {
return name;
}
public double getSalary(){
return salary;
}
}
// Manager.java
public class Manager extends Employee{
private double additionalSalary;
public Manager() {
}
public Manager(String id, String name, double salary, double additionalSalary) {
super(id, name, salary);
this.additionalSalary = additionalSalary;
}
public double getAdditionalSalary() {
return additionalSalary;
}
public void setAdditionalSalary(double additionalSalary) {
this.additionalSalary = additionalSalary;
}
@Override
public double calculateSalary() {
return super.getSalary() + getAdditionalSalary();
}
}
// Programmer.java
public class Programmer extends Employee{
private double projectSalary;
public double getProjectSalary() {
return projectSalary;
}
public Programmer() {
}
public Programmer(String id, String name, double salary, double projectSalary) {
super(id, name, salary);
this.projectSalary = projectSalary;
}
public void setProjectSalary(double projectSalary) {
this.projectSalary = projectSalary;
}
@Override
public double calculateSalary() {
return super.getSalary() + getProjectSalary();
}
}
// Company.java
public class Company {
public void lookEmployeeSalary(Employee employee) {
String position = "員工";
if (employee instanceof Manager) {
position = "經理";
} else if (employee instanceof Programmer){
position = "程式員";
}
System.out.println("員工的工號: " + employee.id);
System.out.println("員工的姓名: " + employee.name);
System.out.println("員工的職位: " + position);
System.out.println("員工的工資: " + employee.calculateSalary());
}
}
public class Demo {
public static void main(String[] args) {
Company company = new Company();
company.lookEmployeeSalary(new Manager("001", "經理一號",20000, 3000));
System.out.println("============================");
company.lookEmployeeSalary(new Programmer("002", "程式員一號",20000, 3000));
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548900.html
標籤:其他
上一篇:自研日志實用工具類
