JavaSE複習之二 基礎知識:物件導向 補充(6)

NO IMAGE

物件導向

Eclipse常用快捷鍵操作

Eclipse文件註釋匯出幫助文件

Eclipse專案的jar包匯出與使用jar包

不同修飾符混合使用細節

辨析何時定義變數為成員變數

類、抽象類、介面作為方法引數

類、抽象類、介面作為方法返回值

第1章 Eclipse的應用

1.1 常用快捷操作

l Ctrl T:檢視所選中類的繼承樹

例如,在下面程式碼中,選中Teacher類名,然後按Ctrl T,就會顯示出Teacher類的繼承關係

 

//員工

abstract class Employee{

public abstract void work();

}

 

//講師

class Teacher extends Employee {

public void work() {

System.out.println(“正在講解Java”);

}

}

 

l 檢視所選中類的原始碼

Ctrl 滑動滑鼠點選類名,或者選中類名後,按F3鍵檢視所選中類的原始碼。

 

 

l 檢視所選中方法的原始碼

Ctrl 滑動滑鼠點選方法名,或者選中方法名後,按F3鍵檢視所選中方法的原始碼。

 

l Eclipse中的JRE System Library是預設的Eclipse依賴JRE中的類庫。在該位置可以查詢到平常使用的String類、Random類、Math類等。

 

1.2 文件註釋匯出幫助文件

在eclipse使用時,可以配合文件註釋,匯出對類的說明文件,從而供其他人閱讀學習與使用。

通過使用文件註釋,將類或者方法進行註釋用@簡單標註基本資訊。如@author 作者、@version程式碼版本、@param方法引數、@return方法返回值等。

package cn.itcast;

/**

 * 我的工具類

 * @author Li

 * @version 1.0版本

 */

public class Tool {

/**

 * 返回兩個整數的累加和

 * @param num1 第一個數

 * @param num2 第二個數

 * @return 返回累加和

 */

public static int getSum(int num1, int num2){

return num1  num2;

}

}

 

使用Eclipse匯出javadoc文件即可,操作步驟如下圖:

 

1.3 專案的jar包匯入與匯出

jar包是一個可以包含許多.class檔案的壓縮檔案。我們可以將一個jar包加入到專案的依賴中,從而該專案可以使用該jar下的所有類;也可以把專案中所有的類打包到指定的jar包,提供給其他專案使用。

匯出jar包:即把專案中所有類,打包到指定的jar包中,步驟如下圖:

 

 

匯入jar包:即把指定的jar包,加入到指專案中,提供給專案使用。

匯入jar包的過程是將jar包加入到專案的.classpath檔案中去,讓專案識別,便可以使用jar包中所有的.class檔案類。以下是加入步驟:

1:專案根資料夾下建立lib資料夾,用於同一管理所有的jar檔案

2:把jar檔案複製到lib資料夾中

3:右鍵點選jar檔案,點選Build Path,選擇Add to Build Path,此時檢視專案根資料夾下的.classpath檔案,發現新加入的jar包路徑被配置到了該檔案中。說明可以使用jar包中所有類了。

 

l 注意:

Jar包加入後,必須Add to Build Path才能使用

Jar包加入後,加入的類也必須導包,如果加入的類其包名與現有類包名相同,則視作在同一個包下。(不常見)

第2章 物件導向

2.1 不同修飾符使用細節

常用來修飾類、方法、變數的修飾符如下:

l public 許可權修飾符,公共訪問, 類,方法,成員變數

l protected 許可權修飾符,受保護訪問, 方法,成員變數

l 預設什麼也不寫 也是一種許可權修飾符,預設訪問, 類,方法,成員變數

l private 許可權修飾符,私有訪問, 方法,成員變數

l static 靜態修飾符  方法,成員變數

l final 最終修飾符   類,方法,成員變數,區域性變數

l abstract 抽象修飾符  類 ,方法

 

我們編寫程式時,許可權修飾符一般放於所有修飾符之前,不同的許可權修飾符不能同時使用;

同時,abstract與private不能同時使用;

同時,abstract與static不能同時使用;

同時,abstract與final不能同時使用。

 

l 修飾能夠使用的修飾符:

修飾類只能使用public、預設的、final、abstract關鍵字

使用最多的是 public關鍵字

public class Demo {} //最常用的方式

class Demo2{}

public final class Demo3{}

public abstract class Demo4{}

 

l 修飾成員變數能夠使用的修飾符:

public : 公共的

protected : 受保護的

: 預設的

private :私有的

final : 最終的

static : 靜態的

使用最多的是 private

public int count = 100;

protected int count2 = 100;

int count3 = 100;

private int count4 = 100; //最常用的方式

public final int count5 = 100;

public static int count6 = 100;

 

 

l 修飾構造方法能夠使用的修飾符:

public : 公共的

protected : 受保護的

: 預設的

private :私有的

使用最多的是 public

public Demo(){} //最常用的方式

protected Demo(){}

Demo(){}

private Demo(){}

 

l 修飾成員方法能夠使用的修飾符:

public : 公共的

protected : 受保護的

: 預設的

private :私有的

final : 最終的

static : 靜態的

abstract : 抽象的

使用最多的是 public

public void method1(){}//最常用的方式

protected void method2(){}

void method3(){}

private void method4(){}

public final void method5(){}

public static void method6(){}//最常用的方式

public abstract void method7();//最常用的方式

第3章 自定義資料型別的使用

3.1 辨析成員變數與方法引數的設計定義

l 定義長方形類,包含求周長與求面積的方法

l 定義數學工具類,包含求兩個數和的二倍與求兩個數積的方法

思考:這兩個類的計算方法均需要兩個數參與計算,請問兩個數定義在成員位置還是形參位置更好,為什麼?

如果變數是該類的一部分時,定義成成員變數。

如果變數不應該是類的一部分,而僅僅是功能當中需要參與計算的數,則定義為形參變數。

 

l 數學工具類

public class MathTool {

//求兩個數的和的二倍

public double sum2times(int number,int number2) {

return (number number2)*2;

}

//求兩個數的積

public double area(int number,int number2) {

return number*number2;

}

}

 

l 長方形類

public class CFX {

//因為長與寬,在現實事物中屬於事物的一部分,所以定義成員變數

private int chang;

private int kuan;

public CFX(int chang, int kuan) {

this.chang = chang;

this.kuan = kuan;

}

//求長與寬的周長

public double zhouChang() {

return (chang kuan)*2;

}

//求長與寬的面積

public double mianJi() {

return chang*kuan;

}

public int getChang() {

return chang;

}

public void setChang(int chang) {

this.chang = chang;

}

public int getKuan() {

return kuan;

}

public void setKuan(int kuan) {

this.kuan = kuan;

}

}

3.2 類作為方法引數與返回值

l 類作為方法引數

在編寫程式中,會經常碰到呼叫的方法要接收的是一個類型別的情況,那麼這時,要向方法中傳入該類的物件。如下程式碼演示:

class Person{

public void show(){

System.out.println(“show方法執行了”);

}

}

//測試類

public class Test {

public static void main(String[] args) {

//建立Person物件

Person p = new Person();

//呼叫method方法

method(p);

}

//定義一個方法method,用來接收一個Person物件,在方法中呼叫Person物件的show方法

public static void method(Person p){

p.show();

}

}

 

l 類作為方法返回值

寫程式呼叫方法時,我們以後會經常碰到返回一個類型別的返回值,那麼這時,該方法要返回一個該類的物件。如下程式碼演示:

class Person{

public void show(){

System.out.println(“show方法執行了”);

}

}

//測試類

public class Test {

public static void main(String[] args) {

//呼叫method方法,獲取返回的Person物件

Person p = method();

//呼叫p物件中的show方法

p.show();

}

//定義一個方法method,用來獲取一個Person物件,在方法中完成Person物件的建立

public static Person method(){

Person p = new Person();

return p;

}

}

3.3 抽象類作為方法引數與返回值

l 抽象類作為方法引數

今後開發中,抽象類作為方法引數的情況也很多見。當遇到方法引數為抽象類型別時,要傳入一個實現抽象類所有抽象方法的子類物件。如下程式碼演示:

//抽象類

abstract class Person{

public abstract void show();

}

class Student extends Person{

@Override

public void show() {

System.out.println(“重寫了show方法”);

}

}

//測試類

public class Test {

public static void main(String[] args) {

//通過多型的方式,建立一個Person型別的變數,而這個物件實際是Student

Person p = new Student();

//呼叫method方法

method(p);

}

//定義一個方法method,用來接收一個Person型別物件,在方法中呼叫Person物件的show方法

public static void method(Person p){//抽象類作為引數

//通過p變數呼叫show方法,這時實際呼叫的是Student物件中的show方法

p.show();

}

}

 

l 抽象類作為方法返回值

抽象類作為方法返回值的情況,也是有的,這時需要返回一個實現抽象類所有抽象方法的子類物件。如下程式碼演示:

//抽象類

abstract class Person{

public abstract void show();

}

class Student extends Person{

@Override

public void show() {

System.out.println(“重寫了show方法”);

}

}

//測試類

public class Test {

public static void main(String[] args) {

//呼叫method方法,獲取返回的Person物件

Person p = method();

//通過p變數呼叫show方法,這時實際呼叫的是Student物件中的show方法

p.show();

}

//定義一個方法method,用來獲取一個Person物件,在方法中完成Person物件的建立

public static Person method(){

Person p = new Student();

return p;

}

}

3.4 介面作為方法引數與返回值

l 介面作為方法引數

介面作為方法引數的情況是很常見的,經常會碰到。當遇到方法引數為介面型別時,那麼該方法要傳入一個介面實現類物件。如下程式碼演示。

//介面

interface Smoke{

public abstract void smoking();

}

class Student implements Smoke{

@Override

public void smoking() {

System.out.println(“課下吸口煙,賽過活神仙”);

}

}

//測試類

public class Test {

public static void main(String[] args) {

//通過多型的方式,建立一個Smoke型別的變數,而這個物件實際是Student

Smoke s = new Student();

//呼叫method方法

method(s);

}

//定義一個方法method,用來接收一個Smoke型別物件,在方法中呼叫Smoke物件的show方法

public static void method(Smoke sm){//介面作為引數

//通過sm變數呼叫smoking方法,這時實際呼叫的是Student物件中的smoking方法

sm.smoking();

}

}

 

l 介面作為方法返回值

介面作為方法返回值的情況,在後面的學習中會碰到。當遇到方法返回值是介面型別時,那麼該方法需要返回一個介面實現類物件。如下程式碼演示。

 

//介面

interface Smoke{

public abstract void smoking();

}

class Student implements Smoke{

@Override

public void smoking() {

System.out.println(“課下吸口煙,賽過活神仙”);

}

}

//測試類

public class Test {

public static void main(String[] args) {

//呼叫method方法,獲取返回的會吸菸的物件

Smoke s = method();

//通過s變數呼叫smoking方法,這時實際呼叫的是Student物件中的smoking方法

s.smoking();

}

//定義一個方法method,用來獲取一個具備吸菸功能的物件,並在方法中完成吸菸者的建立

public static Smoke method(){

Smoke sm = new Student();

return sm;

}

}

 

第4章 星級酒店案例

4.1 案例介紹

某五星級酒店,資金雄厚,要招聘多名員工(經理、廚師、服務員)。入職的員工需要記錄個人資訊(姓名、工號、經理特有獎金屬性)。他們都有自己的工作要做。

本案例要完成如下需求:

l 獲取酒店幸運員工;

l 酒店開設VIP服務,酒店的廚師與服務員可以提供VIP服務。(廚師做菜加量、服務員給顧客倒酒)。

l 編寫測試類

l 向酒店中,增加多名員工(其中包含1名經理,1名廚師、2名服務員);

l 呼叫酒店員工的工作功能

l 呼叫酒店員工的VIP服務功能

 

4.2 案例需求分析

l 根據“某五星級酒店,資金雄厚……都有自己的工作要做。”分析出,該題目中包含酒店,可以把它封裝成類,多名員工)。

class 員工 {

     屬性:姓名

屬性:工號

方法:工作

}

class 廚師 extends 員工{}

class 服務員 extends 員工{}

class 經理 extends 員工 {

     屬性:獎金

}

 

員工的型別有經理、廚師、服務員,它們有共同的屬性(姓名、工號、),經理額外屬性(獎金)。

 

l 根據“向酒店中,增加多名員工(其中包含1名經理,1名廚師、2名服務員)”。分析出,要建立一個酒店物件,並新增4名員工到酒店物件的員工集合中。

酒店員工集合新增新員工: 經理物件

酒店員工集合新增新員工: 廚師物件

酒店員工集合新增新員工: 服務員物件

酒店員工集合新增新員工: 服務員物件

 

l 根據“獲取酒店幸運員工”。分析出,從酒店員工集合隨機得到一名員工物件。

1. 從酒店員工集合長度範圍內,隨機產生一個隨機數

2. 使用該隨機數作為集合的索引,返回該索引處對應的員工物件

 

l 根據“酒店開設VIP服務,酒店的廚師與服務員可以提供VIP服務。(廚師做菜加量、服務員給顧客倒酒)”。分析出,這是要增加一個VIP的介面,介面中提供個VIP服務的方法。讓廚師與服務員實現該介面。

interface VIP服務{

     抽象方法:服務

}

class 廚師 extends 員工 implements VIP服務{ 重寫服務方法 }

class 服務員 extends 員工 implements VIP服務{ 重寫服務方法 }

4.3 實現程式碼步驟

l VIP服務

public interface VIP {

     public abstract void server(); //服務

}

 

l 員工

/*

 * 員工:

 姓名 String

 工號 String

 */

public abstract class YuanGong {

// 成員變數

private String xingMing;

private String gongHao;

// 構造方法

public YuanGong() {

super();

}

public YuanGong(String xingMing, String gongHao) {

super();

this.xingMing = xingMing;

this.gongHao = gongHao;

}

// 抽象方法

public abstract void work();

// getters與setters

public String getXingMing() {

return xingMing;

}

public void setXingMing(String xingMing) {

this.xingMing = xingMing;

}

public String getGongHao() {

return gongHao;

}

public void setGongHao(String gongHao) {

this.gongHao = gongHao;

}

}

 

l 服務員

/*

 * 定義員工的子類 服務員類

 */

public class FuWuYuan extends YuanGong implements VIP {

public FuWuYuan() {

super();

}

 

public FuWuYuan(String xingMing, String gongHao) {

super(xingMing, gongHao);

}

@Override

public void work() {

System.out.println(“親,全身心為您服務,記得給好評哦”);

}

@Override

public void server() {

System.out.println(“給顧客倒酒”);

}

}

 

l 經理

/*

 * 經理在員工的基礎上,新增了獎金成員

 */

public class JingLi extends YuanGong {

private double jiangJin;

 

public JingLi() {

super();

}

public JingLi(String xingMing, String gongHao, double jiangJin) {

super(xingMing, gongHao);

this.jiangJin = jiangJin;

}

 

public double getJiangJin() {

return jiangJin;

}

public void setJiangJin(double jiangJin) {

this.jiangJin = jiangJin;

}

 

@Override

public void work() {

System.out.println(“哪個員工讓顧客不滿意,我扣誰錢”);

};

}

 

l 廚師

/*

 * 定義員工的子類 廚師類

 */

public class ChuShi extends YuanGong implements VIP{

public ChuShi() {

super();

}

public ChuShi(String xingMing, String gongHao) {

super(xingMing, gongHao);

}

 

@Override

public void work() {

System.out.println(“我做飯,放心吃吧,包您滿意”);

}

@Override

public void server() {

System.out.println(“做菜加量加料”);

}

}

 

 

l 測試類

public class Test {

public static void main(String[] args) {

     }

}

 

第5章 總結

5.1 知識點總結

l 不同修飾符的使用

l 類,最常使用public修飾

l 成員變數,最常使用private修飾

l 成員方法,最常使用public修飾

l 自定義資料型別的使用

l 類作為方法引數時,說明要向方法中傳入該類的物件

l 類作為方法返回值時,說明該方法要返回一個該類的物件。

l 抽象類作為方法引數時,說明要傳入一個實現抽象類所有抽象方法的子類物件。

l 抽象類作為方法返回值時,說明需要返回一個實現抽象類所有抽象方法的子類物件。

l 介面作為方法引數時,說明該方法要傳入一個介面實現類物件。

l 介面作為方法返回值時,說明該方法需要返回一個介面實現類物件。