1. 程式人生 > >Java類和多態

Java類和多態

note 問控制 部分 老師 訪問控制權限 private 擴展 ati oid

*********************第八章 復用類和多態******************************

可復用


一.方法


二.復用 類

1.組合

2.繼承


*****************************組合 has a******************************

一.什麽是組合


是關聯的特例


組合: 部分只能屬於一個整體

整體有一個部分

人和心臟 汽車和發動機

二.how

類A 組合 一個類B的對象

class A {

B b = new B();//組合
}

舉例1:

學生有一個女朋友

public class Student{

private int sno;
private String name;
private int age;

private Girl girl = new Girl();//組合
}


舉例2:

筆記本有一個屏幕


14寸屏幕

package com.chapter8.演示組合;

//14寸的屏幕
public class Screen14 {

public void display(){
System.out.println("使用14寸屏幕進行顯示");
}
}

筆記本

package com.chapter8.演示組合;

//筆記本
public class Notebook {

//組合
//has a 筆記本 有一個屏幕
private Screen14 screen = new Screen14();

public void work(){
System.out.println("主板通電");
System.out.println("硬盤轉");
System.out.println("cpu從硬盤中讀取操作系統文件");
System.out.println("風扇轉");

screen.display();//復用了屏幕類的代碼 不需要從新再寫一遍屏幕的顯示邏輯了
}

public static void main(String[] args) {
Notebook notebook = new Notebook();

notebook.work();
}


}

三.why 為什麽用組合


復用類的代碼


當多個類中 有相同的代碼時 使用方法來復用代碼 就不管用了

1.需要把多個類中(戰士、法師、弓箭中)相同的代碼 抽取出來 抽到一個類中(Knife 刀)

2.定義的戰士的時候 讓戰士組合一把刀 復用刀的代碼

//戰士 has a 刀
class 戰士 {

private Knife knife = new Knife();//組合


public void attack(){

knife.kan();
}
}

其他類也是一樣


class 弓箭手 {

private Knife knife = new Knife();//組合


public void attack(){

knife.kan();
}
}


*****************************局部變量能使用 訪問控制權限修飾符 修飾嗎??***************************

不能.因為局部變量的作用域由程序員定義的位置決定,不能使用 訪問權限修飾符修飾

一.修飾類的


二.修飾類的成員的(1.屬性 2.方法)

***********************************依賴關系*****************************************

把一個對象 定義成局部變量 並且調用該對象的方法 這時候會產生依賴

例如


package com.chapter8.演示組合;


依賴
// 筆記本的工作---------->屏幕的顯示
public class Notebook {


public void work(){

Screen14 screen = new Screen14();//依賴

System.out.println("主板通電");
System.out.println("硬盤轉");
System.out.println("cpu從硬盤中讀取操作系統文件");
System.out.println("風扇轉");

screen.display();//復用了屏幕類的代碼 不需要從新再寫一遍屏幕的顯示邏輯了
}

public static void main(String[] args) {
Notebook notebook = new Notebook();

notebook.work();
}


}


**********************************繼承******************************

復用類的第二種方式: 繼承


一.why 什麽時候想到使用繼承


當多個類中有相同的方法(吃飯、睡覺、打豆豆),為了防止多個類中相同的方法或屬性

出現多次,可以把多個類中相同的屬性和方法 抽取到一個類中 Person,其他類繼承這個Person

即可,解決了代碼冗余問題


二.what 什麽是繼承 is a


準確的應該翻譯成擴展 ,可以理解成復制

學生類繼承人這個類,相當於學生類 在人這個類的基礎上擴展代碼(加代碼)

Person類可以看成代碼的0.1版本

子類 Student 可以看成 0.2版 在0.1的基礎上加代碼

子類 is a 父類


學生 is a Person

老師 is a Person


public class Person {
public void eat() {
System.out.println("吃飯");
}

public void sleep() {
System.out.println("睡覺");
}

public void beatBeanBean() {
System.out.println("打豆豆");
}
}

public class Student extends Person{


public void study(){
//我在學習
}
}

相當於

public class Student{
public void eat() {
System.out.println("吃飯");
}

public void sleep() {
System.out.println("睡覺");
}

public void beatBeanBean() {
System.out.println("打豆豆");
}

public void study(){
//我在學習
}

}


三.how 如何繼承

使用extends 關鍵字


public class Student extends Person{


public void study(){
//我在學習
}

public static void main(String[] args) {
Student s = new Student();

s.eat();//子類中沒有定義eat() 但是可以調用 說明從父類中繼承了eat()方法
}
}


Person 叫做父類,也叫做 基類、超類


Student 叫做子類, 也叫做派生類、衍生類

**不要重造輪子,父類的代碼寫過一遍,就不要再從新寫了, 直接繼承就可以了...


***********************************組合和繼承如何選用?*******************************************


多用組合,少用繼承。 除非有明確的is a 關系再使用繼承

學生 is a Person


為什麽要多用組合,少用繼承?


因為組合比繼承更加靈活

*********************繼承中的訪問控制權限修飾符******************************


1.private

private修飾的屬性和方法 不能被繼承


2. protected 和public 修飾的屬性和方法 可以被繼承

3. default

包權限


本包中的子類 可以繼承,其他包中的子類不能繼承

舉例: 爸爸的寶馬車

父親

//父類
public class Father {

//has a 組合
BMW bmw = new BMW();


}


孩子


public class Son extends Father{

public void goToPlay(){
bmw.drive();
}

public static void main(String[] args) {
Son son = new Son();
son.goToPlay();
}
}

Java類和多態