Java學習之對象與類

思維導圖

類與對象.png

一胆绊、對象與類的概述

對象

  1. 含義:又來描述客觀事物一個實體,由一組屬性和方法構(gòu)成(具體的實體)

  2. 對象的特征:

    1.屬性--對象具有的各種特征 
    2.行為--對象執(zhí)行的操作
    
  3. 使用對象的步驟

     1. 創(chuàng)建對象(如:類名   對象名=new  類名();
         DNF ace=new DNF();)
     2. 引用對象成員:使用“.”進行操作
           引用類的屬性: 對象名.屬性--ace.name="武神 "
           引用類的方法:對象名.方法名()--ace.show();
    

  1. 含義:具有相同屬性和方法的一組對象的集合 (抽象的概念)
    -----是對象的類型
  2. 類與對象的關(guān)系是:
  • 類是對象的抽象---模板禽炬,對象是類的具體---實例。

  • 定義類的步驟--

      1. 定義類名
      1. 編寫類的屬性
      1. 編寫類的方法

二、面向?qū)ο蟮奶匦?/h3>
  1. 封裝-----是把數(shù)據(jù)及處理數(shù)據(jù)的行為結(jié)合起來筑累,不被外界干擾濫用的程序設計機制

  2. 多態(tài)------是使用一個接口訪問一組行為的特性犁珠,執(zhí)行哪個行為由具體情況而定逻炊。

  3. 繼承------是指在一個現(xiàn)有類的基礎(chǔ)上去構(gòu)建一個新的類,構(gòu)建出來的新類被稱作子類(或派生類)犁享,現(xiàn)有類被稱作父類(或基類)余素,子類會自動擁有父類所有可承的屬性和方法。

三炊昆、類的成員

1. 成員變量
  • 定義:成員變量或域變量----在類中定義的屬性數(shù)據(jù)
  • 種類:

類的成員變量桨吊,即域變量。
形式參數(shù)列表中的變量凤巨,稱為參變量视乐。
方法內(nèi)部聲明的變量,稱為局部變量

  • 成員變量和局部變量的區(qū)別

    • A: 在類中的位置不同
      • 成員變量:在類中方法外
      • 局部變量: 在方法定義中或者方法聲明上
    • B: 在內(nèi)存中的位置不同
      • 成員變量:在堆內(nèi)存中
      • 局部變量:在 棧內(nèi)存中
    • C:生命周期不同
      • 成員變量:隨著對象的創(chuàng)建而存在敢茁,隨著對象的消 失
      • 局部變量:隨著方法的調(diào)用而存在佑淀,隨著方法的調(diào)用完畢而消失
    • D: 初始化 值不同
      • 成員變量:有默認初始化 值
      • 局部變量:沒有買默認初始化值,必須定義彰檬,賦值 伸刃,然后才能使用谎砾。
  • 注意事項:

局部變量名稱可以和成員變量名稱相同,在方法使用的時候捧颅,采用的是就原則

2. 成員方法
  • 定義:

用來定義對類成員變量進行操作

  • 種類:
  1. 構(gòu)造方法
  • 當用戶定義了構(gòu)造方法時,程序不再產(chǎn)生默認的構(gòu)造方法.
  • 構(gòu)造方法只在創(chuàng)建對象時調(diào)用
  • 構(gòu)造方法的注意事項:
    • A: 如果我們沒有給出構(gòu)造方法,系統(tǒng)自動提供一個無參數(shù)構(gòu)造方法
    • B:如果我們給出構(gòu)造方法,系統(tǒng)將不會 給出默認的無參構(gòu)造方法
  • 建議:定義了有參構(gòu)造時景图,也添加一個無參構(gòu)造方法
  • 例如:
//定義一個學生類
public class Student{
    private String name;
    private int age;
    //無參構(gòu)造
    public Student(){
    }
    //有參構(gòu)造
    public Student(String name){
    //this關(guān)鍵字表示本對象
        this.name = name
    }
}

//調(diào)用
Student s1 = new Student();
Student s2 = new Student("張三");
  1. 普通方法
  • 方法的重載

    • 定義: Java中,同個類中有多個同名的方法碉哑,稱為重載
    • 滿足重載的條件:
      1. 方法名相同
      2. 參數(shù)列表不同:參數(shù)個數(shù)挚币、參數(shù)類型、參數(shù)順序
      3. 形參名不同谭梗、返回值類型不同不影響方法的加載
  • 注: 除了成員方法重載外忘晤,構(gòu)造方法也可以重載,定義了重載構(gòu)造方法的類可以用這些不同的構(gòu)造方法創(chuàng)建對象激捏。

  • 方法重寫
    • 定義:若子類中的方法與父類中的某一方法具有相同的方法名设塔、返回類型和參數(shù)表,則新方法將覆蓋原有的方法
public class Animal{
    
    public void eat(){
        System.out.print("吃東西T毒恕闰蛔!");
    }
}

public class Dog extends Animal{
    
    //子類重寫了父類的eat方法
    @Override
    public void eat(){
        System.out.print("吃狗糧!图柏!");
    }
}


3. 類成員初始化順序

四序六、內(nèi)部類

什么是內(nèi)部類呢?

  1. 內(nèi)部類( Inner Class )就是定義在另外一個類里面的類蚤吹。與之對應例诀,包含內(nèi)部類的類被稱為外部類。

作用:

  1. 內(nèi)部類提供了更好的封裝裁着,可以把內(nèi)部類隱藏在外部類之內(nèi)繁涂,不允許同一個包中的其他類訪問該類

  2. 內(nèi)部類的方法可以直接訪問外部類的所有數(shù)據(jù),包括私有的數(shù)據(jù)

  3. 內(nèi)部類所實現(xiàn)的功能使用外部類同樣可以實現(xiàn)二驰,只是有時使用內(nèi)部類更方便

種類: 成員內(nèi)部類扔罪,靜態(tài)內(nèi)部類,方法內(nèi)部類桶雀,匿名內(nèi)部類矿酵。

訪問修飾符:

  1. private:為了保護 數(shù)據(jù)
  2. static:為了容易訪問數(shù)據(jù)

一、成員內(nèi)部類:

  1. 可以使用任意訪問控制符修飾矗积,如 public 全肮、 protected 、 private 等
  2. 直接訪問 外部類中的私有屬性A:
  • 注意:外部類不能訪問內(nèi)部類的成員變量和成員方法棘捣。
   public class outer{
       private String A="fds";
       public int i=1;
       public class inner{
           String B="asf"
           int i=2;
           public void show(){
               System.out.println(A);
               System.out.println(B);
               System.out.println(outer.this.i);//當外部類與內(nèi)部類成員變量相同時辜腺,訪問外部類成員的語句,外部類名.this.變量名
               System.out.println(i);//訪問內(nèi)部類成員變量
           }
   
       }
   
   }
   public static void main(String [] ages){
       //創(chuàng)建外部類的對象
       outer  o=new out();
       //創(chuàng)建內(nèi)部類的對象;
       inner i=o.new inner();//創(chuàng)建內(nèi)部類的語句:內(nèi)部類 對象名 = 外部類對象.new 內(nèi)部類( );
   
   }

二哪自、方法內(nèi)部類

概念:

  1. 方法內(nèi)部類就是內(nèi)部類定義在外部類的方法中,方法內(nèi)部類只在該方法的內(nèi)部可見禁熏,即只在該方法內(nèi)可以使用壤巷。

  2. 注意:由于方法內(nèi)部類不能在外部類的方法以外的地方使用,因此方法內(nèi)部類不能使用訪問控制符和 static 修飾符

三瞧毙、靜態(tài)內(nèi)部類

特點:

  1. 靜態(tài)內(nèi)部類不能直接訪問外部類的非靜態(tài)成員胧华,但可以通過 new 外部類().成員 的方式訪問

  2. 如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱相同,可通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員宙彪;如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱不相同矩动,則可通過“成員名”直接調(diào)用外部類的靜態(tài)成員

  3. 創(chuàng)建靜態(tài)內(nèi)部類的對象時,不需要外部類的對象释漆,可以直接創(chuàng)建 內(nèi)部類 對象名= new 內(nèi)部類();

    sample1:
    //外部類
    
    public class HelloWorld {
        // 外部類中的靜態(tài)變量score
      private static int score = 84;
        // 創(chuàng)建靜態(tài)內(nèi)部類
    public static class SInner {
         // 內(nèi)部類中的變量score
         int score = 91;
    public void show() {
        System.out.println("訪問外部類中的score:" + HelloWorld.score );
    //通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員                 System.out.println("訪問內(nèi)部類中的score:" + score);
        
        }
        
    }
    
    // 測試靜態(tài)內(nèi)部類
    public static void main(String[] args) {
            // 直接創(chuàng)建內(nèi)部類的對象
     SInner si=new SInner();
     //創(chuàng)建靜態(tài)內(nèi)部類,可以直接創(chuàng)建 內(nèi)部類 對象名= new 內(nèi)部類();  
         // 調(diào)用show方法
        
        si.show();
        
    //不過為了更清晰知道這個靜態(tài)內(nèi)部類Sinner的位置悲没,一般創(chuàng)建靜態(tài)內(nèi)部類的格式為:外部類名.內(nèi)部類名 對象名 = new 外部類名.內(nèi)部類名();
    HelloWorld.SInner si=new HelloWorld.SInner();
        }
    
    }
三、使用內(nèi)部類實現(xiàn)迭代器
public class Sequence {
    private Object[] items;//對象數(shù)字組
    private int next=0;//當前對象下標
    public Sequence(int size){
        items=new Object[size];
    }
    //添加
    public void add(Object x){
        if(next<items.length){
            items[next++]=x;
        }
    }
    private class SequenceSelector implements Selector{
        private int i=0;
        //判斷是否打印結(jié)束
        @Override
        public boolean end() {
            // TODO Auto-generated method stub
            return i==items.length;
        }

//獲取當前對象
        @Override
        public Object current() {
            // TODO Auto-generated method stub
            return items[i];
        }
//下一對象
        @Override
        public void next() {
            if(i<items.length){
                i++;
            }           
        }
    }
    public  Selector getSelector(){
        return new SequenceSelector();
    }
    public interface Selector{
        boolean end();//判斷是否結(jié)束
        Object current();//獲取當前對象
        void next();//獲取下一個對像
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末男图,一起剝皮案震驚了整個濱河市示姿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逊笆,老刑警劉巖栈戳,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異难裆,居然都是意外死亡子檀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門乃戈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褂痰,“玉大人,你說我怎么就攤上這事偏化∑甓鳎” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵侦讨,是天一觀的道長驶冒。 經(jīng)常有香客問我,道長韵卤,這世上最難降的妖魔是什么骗污? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮沈条,結(jié)果婚禮上需忿,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好屋厘,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布涕烧。 她就那樣靜靜地躺著,像睡著了一般汗洒。 火紅的嫁衣襯著肌膚如雪议纯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天溢谤,我揣著相機與錄音瞻凤,去河邊找鬼。 笑死世杀,一個胖子當著我的面吹牛阀参,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瞻坝,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼蛛壳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了湿镀?” 一聲冷哼從身側(cè)響起炕吸,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勉痴,沒想到半個月后赫模,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡蒸矛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年瀑罗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雏掠。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡斩祭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乡话,到底是詐尸還是另有隱情摧玫,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布绑青,位于F島的核電站诬像,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏闸婴。R本人自食惡果不足惜坏挠,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望邪乍。 院中可真熱鬧降狠,春花似錦对竣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛋褥,卻和暖如春烦味,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背壁拉。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留柏靶,地道東北人弃理。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像屎蜓,于是被迫代替她去往敵國和親痘昌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

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