java :類和對象

一概荷、類與對象

類:類是一個模板攒射,描述一類對象的狀態(tài)和行為;
對象:對象為類的一個實例猎唁,具有自己的屬性(狀態(tài))和方法(行為)咒劲;

java是一種面向?qū)ο蟮恼Z言,類的基本特征有:
繼承胖秒、多態(tài)缎患、抽象、封裝阎肝;

類是對象的描述挤渔,對象是類的實例;

類的聲明

[public] [abstract|final] class 類名 [extends 超類名] [implements 接口名]{
成員變量风题;
方法判导;
}


public class clock{
    int hour;
    int minute;
    public int gethour(){
      return hour;
    }
}

對象引用的聲明

類名 引用名 = new 類名();
new 動態(tài)分配內(nèi)存空間;

clock c= new clock();

數(shù)據(jù)成員:
數(shù)據(jù)類型 變量名 [= 初始值]沛硅;

方法成員:
[public|private|protected|default] [static] [final] 返回類型 方法名字 (參數(shù)列表){
函數(shù)體;
}

實例變量

1眼刃、未使用static 修飾的成員變量;
2摇肌、調(diào)用只能為: 變量名.實例變量擂红;

類(靜態(tài))變量

1、使用 static 修飾的變量围小;
2昵骤、調(diào)用可以為: 變量名.類變量 或者 類.類變量;
3肯适、在整個類中只有一個值变秦,初始化時被賦值;
4框舔、其使用的情況為:
a蹦玫、類中所有對象都相同的屬性赎婚;
b、經(jīng)常要共享的數(shù)據(jù)樱溉;


public class CD {
    int publictime;
    double price;
    static String sex = new String("male"); //靜態(tài)變量
    public static void main(String[] args) {
        CD c=new CD();
        CD d=new CD();
        System.out.println(c.sex+' '+d.sex+' '+CD.sex);
        d.sex="female";
        System.out.println(c.sex+' '+d.sex+' '+CD.sex);

    }
}

// output //
male male
female female

同理挣输,還有實例方法以及類(靜態(tài))方法;

對象的初始化

采用構(gòu)造方法:
1饺窿、方法與類名相同歧焦;
2、不定義返回類型肚医;
3绢馍、通常為public修飾符;
4肠套、未顯式聲明時舰涌,生成默認的構(gòu)造方法;
5你稚、子類無法繼承超類的構(gòu)造器瓷耙;
備注:默認的構(gòu)造方法為:數(shù)值類定義為 0,字符型定義為 null刁赖;
布爾型默認為 false;

對于繼承而已搁痛,子類會默認調(diào)用父類的構(gòu)造器,但是如果沒有默認的父類構(gòu)造器宇弛,子類必須要顯示的指定父類的構(gòu)造器鸡典,而且必須是在子類構(gòu)造器中做的第一件事(第一行代碼)。

public class CD {
    int publictime; // 隱式賦值枪芒;
    double price;
    final int nums=12; //希望該屬性為常量,則采用 final 修飾彻况;
    // 初始化必須為 屬性定義時或者構(gòu)造函數(shù)內(nèi)部;
    static String sex = new String("male");

    public CD(double price){  //構(gòu)造函數(shù)
        this.price=price; //當參數(shù)與成員變量同名時舅踪,采用this纽甘;
    // this 是指當前對象;
    }
    public static void main(String[] args) {
        CD c=new CD(2.0);
        System.out.println("c.price="+c.price+" "+"c.publictime="+c.publictime);

    }


c.price=2.0 c.publictime=0
可變長參數(shù)

利用一個數(shù)組來包裹要傳遞的實參;

二抽碌、包(package)

包是一組類的集合悍赢,可以包含多個類,也可以包含多個子包货徙;
包的作用:
1泽裳、將相關(guān)源代碼文件組織在一起;
2破婆、命名空間的管理,劃分命名空間胸囱;
3祷舀、提供包的分裝和提取;
編譯單元:一個java源文件稱為一個編譯單元裳扯;
包的引入 : import packagename. . .
一個編譯單元只能有一個public類抛丽;

包的聲明

package 名字
未命名的包,默認包:所有未聲明包的編譯單元都放在一個默認包內(nèi)饰豺;

類的訪問控制權(quán)限亿鲜,與修飾符有關(guān):

訪問權(quán)限

三、類的重用

1冤吨、 類的繼承

類的繼承:
1蒿柳、從已包含類中生成新的類;
2漩蟆、java只支持單繼承垒探,即一個子類只能有一個超類;
3怠李、新類擁有超類所有的屬性和方法(跟修飾符有關(guān))圾叼;
4、提升的代碼的重用捺癞,提高抽象程度夷蚊;
5、從外部看髓介,子類擁有和超類相同的接口惕鼓;

繼承的語法為:

[public] class 子類名 extends 父類名 {}

class SuperClass {
  private int n;
  SuperClass(){
    System.out.println("SuperClass()");
  }
  SuperClass(int n) {
    System.out.println("SuperClass(int n)");
    this.n = n;
  }
}
class SubClass extends SuperClass{
  private int n;
  
  SubClass(){
    super(300);
    System.out.println("SubClass");
  }  
  
  public SubClass(int n){
    System.out.println("SubClass(int n):"+n);
    this.n = n;
  }
}
public class TestSuperSub{
  public static void main (String args[]){
    SubClass sc = new SubClass();
    SubClass sc2 = new SubClass(200); 
  }

SuperClass(int n)
SubClass
SuperClass()
SubClass(int n):200
2、隱藏和覆蓋

隱藏:子類對于超類繼承過來的屬性和方法版保,如果子類定義了和超類相同的成員變量呜笑,則超類被子類隱藏;
此時訪問超類的成員變量彻犁,采用關(guān)鍵字 super;
方法的覆蓋:
要求覆蓋方法的訪問權(quán)限可以比被覆蓋權(quán)限的訪問權(quán)限廣叫胁,但不能更加嚴格;
派生類汞幢,必須覆蓋超類中的抽象方法驼鹅,超類中聲明的final (終結(jié)方法)不能被覆蓋,static方法不能被覆蓋森篷;

同時输钩,java中所有類,直接或者間接的繼承自 Object 類仲智;

Object 類

”== " and “ equals "

Object 類的 equals 定義為:

public boolean equals(Object x){
    return this == x;
}

”equals“ 表示:
兩個對象永遠相同的數(shù)據(jù)類型以及相同的屬性值 买乃;
equals 需要重寫;

final 類 和 final 方法

1钓辆、final修飾的類和方法剪验;
2肴焊、終結(jié)類或方法不能被繼承;
3功戚、終結(jié)類或者方法不能被覆蓋娶眷;
如String 類為終結(jié)類,終結(jié)類或者方法對系統(tǒng)運行較為重要啸臀,故無法被繼承和覆蓋届宠;

抽象類

1、類名前加 abstract 抽象符乘粒;
2豌注、無法進行實例化;
3谓厘、只有子類實現(xiàn)了超類的所有抽象屬性和方法幌羞,子類才能被實例化;

結(jié)構(gòu)為:

abstract class 類名{
 public abstract 返回體 命名{
    }
}

其優(yōu)點為:
隱藏具體的細節(jié)信息竟稳,所有子類使用都含有相同的行為属桦;

接口

1、類設(shè)計的多繼承他爸;
2聂宾、建立類與類之間的關(guān)系;
3诊笤、將類根據(jù)其實現(xiàn)的功能分組用作接口系谐;

定義為:
[接口修飾符] interfce 接口名稱 [extends 父接口]{

}
1、接口數(shù)據(jù)成員一點要有初值讨跟,且其值無法改變纪他;
2、接口方法必須為抽象方法晾匠;
3茶袒、final 及 abstract 可以省凉馆;
4薪寓、接口無法實例化;
5澜共、可以通過多繼承接口向叉,實現(xiàn)多繼承;

集成接口的語法為
public class 類名 implements 接口名稱1 接口名2{
抽象方法體的實現(xiàn)嗦董;
聲明更多的屬性及方法母谎;
}

類的多態(tài)

類的多態(tài):
多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調(diào)用在編程時并不確定,而是在程序運行期間才確定京革,即一個引用變量倒底會指向哪個類的實例對象销睁,該引用變量發(fā)出的方法調(diào)用到底是哪個類中實現(xiàn)的方法供璧,必須在由程序運行期間才能決定。因為在程序運行時才確定具體的類冻记,這樣,不用修改源程序代碼来惧,就可以讓引用變量綁定到各種不同的類實現(xiàn)上冗栗,從而導(dǎo)致該引用調(diào)用的具體方法隨之改變,即不修改程序代碼就可以改變程序運行時所綁定的具體代碼供搀,讓程序可以選擇多個運行狀態(tài)隅居,這就是多態(tài)性。

理解多態(tài)必須理解向上轉(zhuǎn)型:


public class meida {
    int publictime;
    double price;
    static String sex = new String("male");

    public meida(){
        //price=21; // 類型的隱式轉(zhuǎn)換
        this(0,21.00);


    }
    public meida(int publictime,double price){
        this.publictime=publictime;
        this.price=price;
        this.sex="female";
    }

    public double getprice(){
        return price;
    }
}

public class CD extends meida{

    int like;

    public CD(int a,double b){
        super(a,b); 
        like=12;
    }
    public int getlike(){
        return like;
    }

    public static void main(String[] args) {
        meida c=new CD(5,21.0);
        //System.out.println(c.getlike); //c為meida類葛虐,沒有g(shù)etlike方法
        
    }
}


public class Wine {
    public void fun1(){
        System.out.println("Wine 的Fun.....");
        fun2();
    }
    
    public void fun2(){
        System.out.println("Wine 的Fun2...");
    }
}

public class JNC extends Wine{
    /**
     * @desc 子類重載父類方法
     *        父類中不存在該方法胎源,向上轉(zhuǎn)型后,父類是不能引用該方法的
     * @param a
     * @return void
     */
    public void fun1(String a){
        System.out.println("JNC 的 Fun1...");
        fun2();
    }
    
    /**
     * 子類重寫父類方法
     * 指向子類的父類引用調(diào)用fun2時屿脐,必定是調(diào)用該方法
     */
    public void fun2(){
        System.out.println("JNC 的Fun2...");
    }
}

public class Test {
    public static void main(String[] args) {
        Wine a = new JNC();
        a.fun1();
    }
}
-------------------------------------------------
Output:
Wine 的Fun.....
JNC 的Fun2...

指向子類的父類引用由于向上轉(zhuǎn)型了涕蚤,它只能訪問父類中擁有的方法和屬性,而對于子類中存在而父類中不存在的方法的诵,該引用是不能使用的万栅,盡管是重載該方法。若子類重寫了父類中的某些方法西疤,在調(diào)用該些方法的時候烦粒,必定是使用子類中定義的這些方法(動態(tài)連接、動態(tài)調(diào)用)代赁。

對于面向?qū)ο蠖匀潘鄳B(tài)分為編譯時多態(tài)和運行時多態(tài)。其中編輯時多態(tài)是靜態(tài)的芭碍,主要是指方法的重載徒役,它是根據(jù)參數(shù)列表的不同來區(qū)分不同的函數(shù),通過編輯之后會變成兩個不同的函數(shù)豁跑,在運行時談不上多態(tài)廉涕。而運行時多態(tài)是動態(tài)的,它是通過動態(tài)綁定來實現(xiàn)的艇拍,也就是我們所說的多態(tài)性狐蜕。

當超類對象引用變量引用子類對象時,被引用對象的類型而不是引用變量的類型決定了調(diào)用誰的成員方法卸夕,但是這個被調(diào)用的方法必須是在超類中定義過的层释,也就是說被子類覆蓋的方法,但是它仍然要根據(jù)繼承鏈中方法調(diào)用的優(yōu)先級來確認方法快集,該優(yōu)先級為:this.show(O)贡羔、super.show(O)廉白、this.show((super)O)、super.show((super)O)乖寒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末猴蹂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子楣嘁,更是在濱河造成了極大的恐慌磅轻,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逐虚,死亡現(xiàn)場離奇詭異聋溜,居然都是意外死亡,警方通過查閱死者的電腦和手機叭爱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門撮躁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人买雾,你說我怎么就攤上這事把曼。” “怎么了凝果?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵祝迂,是天一觀的道長。 經(jīng)常有香客問我器净,道長型雳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任山害,我火速辦了婚禮纠俭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘浪慌。我一直安慰自己冤荆,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布权纤。 她就那樣靜靜地躺著钓简,像睡著了一般。 火紅的嫁衣襯著肌膚如雪汹想。 梳的紋絲不亂的頭發(fā)上外邓,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音古掏,去河邊找鬼损话。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的丧枪。 我是一名探鬼主播光涂,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拧烦!你這毒婦竟也來了忘闻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤恋博,失蹤者是張志新(化名)和其女友劉穎服赎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體交播,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年践付,在試婚紗的時候發(fā)現(xiàn)自己被綠了秦士。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡永高,死狀恐怖隧土,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情命爬,我是刑警寧澤曹傀,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站饲宛,受9級特大地震影響皆愉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜艇抠,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一幕庐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧家淤,春花似錦异剥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至青伤,卻和暖如春督怜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背潮模。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工亮蛔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人擎厢。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓究流,卻偏偏與公主長得像辣吃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芬探,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容