天天看點

煮酒論java -- 類和對象

new對象的時候,可以一次建立多個對象。

e.g:梯形 load=new 梯形(3.0f,10.0f,20),lat=new 梯形(2.0f,3.0f,10);

static趣聞

即使在同一類中,static調用非static方法/變量,也要new一個對象。

一個類中的static方法/變量,在另一個勒種調用時,可直接用“類名.變量/方法”。

含有static的方法/變量叫做類方法/變量,不含static的方法/變量稱為執行個體方法/變量。類方法不能通路執行個體變量,但執行個體方法可以通路類變量和執行個體變量。

static int CV;
int AV;
static void setClassVar(int i){
  CV=i;
  //AV=i;   //類方法 NO 執行個體變量
}
void setAV(int i){
  AV=i;
  CV=i;
}      

小酌this

this——java關鍵字,表示某個對象,差別于c++中的“指針”(java不存在指針概念),this絕不能出現在類方法中,this在類的構造方法中時,代表該構造方法所建立的對象,執行個體方法必須通過對象來調用,當this關鍵字出現在類的執行個體方法中時,代表正在調用該方法的目前對象。構造函數中調用同一個類的其它構造函數時用this。

煮酒論java -- 類和對象

包是将一些類聚集在一起的一個實體,同一個包内不允許有重複的類名。

package:放源檔案首

一個包内的所有源檔案是“同類”,一個由錯則全部不能運作。

忘加包名的所有源檔案将共同屬于“無名包”。

import語句

作用:引入包中的類。

最明顯的如:java中的輸入:Scanner類。

還有,java.lang包預設為java核心包,不需要手動導入。

抽象類和接口

實作一個接口需要實作這個接口的所有方法!

(Fn+Alt+Enter ->選第一個)

一般java裡要“得到”的值是boolean類型的話,其方法字首是“is”;

e.g:

private boolean borrow;
public boolean isBorrow(){
  return borrow;
}      

對象傳遞 - 引用傳遞

這一部分在c/c++裡基本都學過,這裡隻給出示例:

public static void main(String[] args){
  Book book=new Book("老九醉酒談java","987-7-1024",5);
  BookBiz bookBiz=new BookBiz();
  bookBiz.sellBook(book);    //這裡book的位址就為15db9742
}      
煮酒論java -- 類和對象

開開心心學java — 啥是類

類——對象的模闆、圖紙,可以規定對象的特征。

為什麼使用繼承?

假設我們正在開發RPG遊戲,職業有:坦克、戰士、刺客。。。(這些就是一個個類)

方案一:直接定義各個英雄類:屬性&方法

但是這樣你想一個問題:上面那些職業在英雄中一定會有重複的吧(移動、名稱…),怎麼辦呢?

方案二:使用繼承

煮酒論java -- 類和對象
Warrior 曹操=new Warrior();
Archmage 小喬=new Archmage();                        YES                    執行個體化自類對象

Hero 曹操=new Warrior();                                                                自類對象實作父類
Hero 小喬=new Archmage();                               YES                   戰士 is a 英雄        法師 is a 英雄      

錯誤執行個體:

Warrior 曹操=new Hero();                                                           錯誤的關系
Archmage 小喬=new Hero();                             NO                   英雄 NOT is a 戰士           英雄 NOT is a 法師      

方法重寫

重寫:在子類中提供一個對方法的新的實作。

煮酒論java -- 類和對象

Object:java中的所有類都繼承自:java.lang.Object;

多态 — 多麼變态

多态——同一個實體,同時具有多種形式。

需求:實作不同英雄角色的移動

如:遊戲中要行走,有一個核心類 moveRole —移動角色

public void moveRole(Warrior warrior){
  warrior.move();      //移動戰士
}      
public void moveRole(Hero hero){
  hero.move();   //調用英雄(父類)的移動方法
}