物件導向VI

2021-06-22 11:21:46 字數 4126 閱讀 3465

多型:

同乙個物件,在不同時刻表現出現的不同狀態。

舉例:水(水,冰,水蒸氣)

狗(動物,狗)

從**的角度來看:

編譯期狀態和執行期狀態不一致的現象。

fu fu = new fu();

zi zi = new zi();

fu fu = new zi();

前提:1:類或者是介面的引用,指向自己的子類物件

2:呼叫子類重寫後的方法

3:有繼承或者實現關係。

**分析:

class fu {

public int num = 10;

public void show() {

system.out.println("fu"+num);

class zi extends fu {

public int num = 10;

public int num2 = 20;

public void show() {

system.out.println("zi"+num);

system.out.println("zi"+num2);

public void method() {

system.out.println("method");

測試類:

class test {

public static void main(string args) {

fu f = new fu();

system.out.println(f.num);

f.show();

zi zi = new zi();

system.out.println(zi.num);

zi.show();

//多型

fu f = new zi();

system.out.println(f.num);

f.show();

多型中成員的特點:

成員變數:編譯和執行都看左邊。

成員方法:編譯看左邊,執行看右邊。

為什麼?

因為方法有重寫,而變數沒有。

經典案例:

設計電腦主機板和介面

主機板類介面usb

外接裝置

//定義主機板類,開機功能,使用usb介面裝置的功能

class mainboard{

public void open(){

system.out.println("主機板開機");

//重點關注使用的usb介面裝置

public void useusb(usb u){// usb u = new upan();

u.read();

u.write();

//定義usb的介面,規定介面規範,2個方法,讀和寫

inte***ce usb{

public abstract void read();

public abstract void write();

//定義u盤類,必須符合usb介面規則

class upan implements usb{

public  void read(){

system.out.println("讀取u盤資料");

public  void write(){

system.out.println("向u盤寫資料");

//定義網絡卡類,必須符合usb介面規則

class netcard implements usb{

public  void read(){

system.out.println("讀取網絡卡資料");

public  void write(){

system.out.println("向網絡卡寫資料");

class  personcomputer{

public static void main(string args) {

//建立主機板物件

mainboard mb = new mainboard();

mb.open();

//將u盤,連線到usb介面,呼叫主機板的使用usb這個方法,傳遞u盤物件

mb.useusb(new upan());

//將u盤,連線到usb介面,呼叫主機板的使用usb這個方法,傳遞網絡卡物件

mb.useusb(new netcard());

外接裝置,並沒有直接和主機板連線

外接裝置,直接到了usb介面上,介面和主機板連線

usb介面出現後,不但提供了規則,降低了外接裝置和主機板的耦合性

耦合性降低,程式的擴充套件性提高

object類:

所有類爹地,所有類繼承object

重寫tostring()方法,建立物件自己的字串表現形式

格式: return "類名" + 所有的成員變數的... + ... + ;

equals()方法:用來進行物件之間的比較,任何物件都具備比較性

a:  不覆蓋的時候,預設比較物件的真實位址引用

b: 覆蓋equals方法,建立自定義的比較形式,用來比較類中成員變數的值

**解析:

object

public string tostring()

在輸出語句中sop()

列印的是乙個引用型別。預設呼叫物件中的tostring()方法

system.out.println(p)==system.out.println(p.tostring())

public boolean equals(object obj)

class person{

string name;

int age;

person(string name,int age){

this.age = age;

this.name = name;

// 覆蓋物件中的tostring方法

public  string tostring(){

// 依據:返回 類名 和 類中成員變數的值

return "person  " + name + "..." + age ;

//覆蓋物件中的equals()方法

public boolean equals(object obj){

//return this == obj;

//對obj進行健壯性判斷

//如果this,和引數obj,指向的是同乙個物件,乙個物件沒有可比性

if(this == obj);

return true;

if( obj == null);

return false;

p2物件提公升為了object型別,型別轉換

if(obj instanceof person){

person p = (person)obj;

return this.age == p.age;

//傳遞的引數,不是人型別,沒有可比性

return false;

class objectdemo {

public static void main(string args) {

person p1 = new person("haha",18);

person p2 = new person("xixi",19);

system.out.println(p1);//person@67f6dc61--雜湊值,理解為記憶體位址 

system.out.println(p2);//person@67f6dc61--雜湊值,理解為記憶體位址 

boolean b = p1.equals(p2);

system.out.println(b);

內部類:

將乙個類定義在另乙個類的裡面,對裡面那個類就稱為內部類(內建類,巢狀   類)。

訪問特點:

1:內部類可以直接訪問外部類中的成員,包括私有成員。

2:而外部類要訪問內部類中的成員必須要建立內部類的物件。

定義時的特點:

內部類定義在成員位置上:

可以被private static成員修飾符修飾。

被static修飾的內部類只能訪問外部類中的靜態成員。

內部類定義在區域性位置上:

可以直接訪問外部類中的成員。

同時可以訪問所在區域性中的區域性變數,但必須是被final修飾的。

物件導向 初識物件導向

面向過程思想 步驟清晰簡單,第一步做什麼,第二步做什麼.面向過程適合處理一些較為簡單的問題 物件導向思想 物以類聚,分類的思維模式,思考問題首先會解決問題需要分哪些類,然後對這些類進行單獨思考,最後才是對某個分類下的細節進行面向過程的思索 物件導向適合處理複雜的問題,適合處理需要多人協作的問題 對於...

物件導向程式設計01 面向過程 物件導向

前面12講我已經寫完了從零開始學j ase 慶祝完結撒花!那麼從今天開始正式步入物件導向程式設計。建議開啟本章之前先回顧 j ase010方法詳解和 j a變數與方法的呼叫 同類操作中與跨類操作中的對比 物件導向程式設計 oop object oriented programming 物件導向程式設...

物件導向過程與物件導向

物件導向過程與物件導向 1 程式的發展經歷了兩個階段 面向過程 物件導向。2 對於物件導向與面向過程可以用乙個例子解釋,如乙個木匠要做乙個盒子,那麼這個盒子的出發點會有兩種方式 物件導向 先想好要做的盒子,之後在去找相應的工具去做。面向過程 不去想要做什麼樣的盒子,隨需取工具。物件導向三大特徵 封裝...