java基礎(chǔ)10_匿名內(nèi)部類

10.01_面向?qū)ο?package關(guān)鍵字的概述及作用)(了解)

  • A:為什么要有包

    • 將字節(jié)碼(.class)進(jìn)行分類存放
    • 包其實(shí)就是文件夾
  • B:包的概述

  • 舉例:
    學(xué)生:增加区丑,刪除拧粪,修改修陡,查詢
    老師:增加,刪除既们,修改濒析,查詢
    ...

      方案1:按照功能分
          com.nono.add
              AddStudent
              AddTeacher
          com.nono.delete
              DeleteStudent
              DeleteTeacher
          com.nono.update
              UpdateStudent
              UpdateTeacher
          com.nono.find
              FindStudent
              FindTeacher
      
      方案2:按照模塊分
          com.nono.teacher
              AddTeacher
              DeleteTeacher
              UpdateTeacher
              FindTeacher
          com.nono.student
              AddStudent
              DeleteStudent
              UpdateStudent
              FindStudent
    

10.02_面向?qū)ο?包的定義及注意事項(xiàng))(掌握)

  • A:定義包的格式
    • package 包名;
    • 多級包用.分開即可
  • B:定義包的注意事項(xiàng)
    • A:package語句必須是程序的第一條可執(zhí)行的代碼
    • B:package語句在一個java文件中只能有一個
    • C:如果沒有package,默認(rèn)表示無包名
  • C:案例演示
    • 包的定義及注意事項(xiàng)
/*
* A:定義包的格式
    * package 包名;
    * 多級包用.分開即可
* B:定義包的注意事項(xiàng)
    * A:package語句必須是程序的第一條可執(zhí)行的代碼
    * B:package語句在一個java文件中只能有一個
    * C:如果沒有package啥纸,默認(rèn)表示無包名
*/
package com.nono;
import com.baidu.Person;
import com.xxx.Student;
//import java.util.Scanner;     //在開發(fā)中我們用的都是導(dǎo)入具體的類
import java.util.*;             //*代表通配符,他會到該包下挨個匹配,匹配上就導(dǎo)入
class Demo1_Package {
    public static void main(String[] args) {
        Person p = new Person("張三",23);
        System.out.println(p.getName() + "..." + p.getAge());
        //p.print();            //在不同包下的無關(guān)類,不允許訪問,因?yàn)槭莗rotected修飾的

        /*Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        System.out.println(x);*/
        
        Student s = new Student("李四",24);
        System.out.println(s.getName() + "..." + s.getAge());
        s.method();
    }
}

10.03_面向?qū)ο?帶包的類編譯和運(yùn)行)(掌握)

  • A:如何編譯運(yùn)行帶包的類
    • a:javac編譯的時候帶上-d即可
      • javac -d . HelloWorld.java
    • b:通過java命令執(zhí)行。
      • java 包名.HellWord

10.04_面向?qū)ο?不同包下類之間的訪問)(掌握)

  • A:案例演示
    • 不同包下類之間的訪問

10.05_面向?qū)ο?import關(guān)鍵字的概述和使用)(掌握)

  • A:案例演示
    • 為什么要有import
      • 其實(shí)就是讓有包的類對調(diào)用者可見,不用寫全類名了
  • B:導(dǎo)包格式
    • import 包名;
    • 注意:
    • 這種方式導(dǎo)入是到類的名稱斯棒。
    • 雖然可以最后寫*盾致,但是不建議。
  • C:package,import,class有沒有順序關(guān)系(面試題)

10.06_面向?qū)ο?四種權(quán)限修飾符的測試)(掌握)

  • A:案例演示
    • 四種權(quán)限修飾符
  • B:結(jié)論
  •               本類   同一個包下(子類和無關(guān)類)  不同包下(子類)    不同包下(無關(guān)類)
      private     Y       
      默認(rèn)          Y       Y
      protected   Y       Y                           Y
      public      Y       Y                           Y               Y
    

10.07_面向?qū)ο?類及其組成所使用的常見修飾符)(掌握)

  • A:修飾符:

    • 權(quán)限修飾符:private荣暮,默認(rèn)的庭惜,protected,public
    • 狀態(tài)修飾符:static穗酥,final
    • 抽象修飾符:abstract
  • B:類:

    • 權(quán)限修飾符:默認(rèn)修飾符护赊,public

    • 狀態(tài)修飾符:final

    • 抽象修飾符:abstract

    • 用的最多的就是:public

  • C:成員變量:

    • 權(quán)限修飾符:private,默認(rèn)的砾跃,protected骏啰,public

    • 狀態(tài)修飾符:static,final

    • 用的最多的就是:private

  • D:構(gòu)造方法:

    • 權(quán)限修飾符:private抽高,默認(rèn)的判耕,protected,public

    • 用的最多的就是:public

  • E:成員方法:

    • 權(quán)限修飾符:private翘骂,默認(rèn)的壁熄,protected,public

    • 狀態(tài)修飾符:static碳竟,final

    • 抽象修飾符:abstract

    • 用的最多的就是:public

  • F:除此以外的組合規(guī)則:

    • 成員變量:public static final
    • 成員方法:
      • public static
      • public abstract
      • public final

10.08_面向?qū)ο?內(nèi)部類概述和訪問特點(diǎn))(了解)

  • A:內(nèi)部類概述
  • B:內(nèi)部類訪問特點(diǎn)
    • a:內(nèi)部類可以直接訪問外部類的成員草丧,包括私有。
    • b:外部類要訪問內(nèi)部類的成員莹桅,必須創(chuàng)建對象方仿。
    • 外部類名.內(nèi)部類名 對象名 = 外部類對象.內(nèi)部類對象;
  • C:案例演示
    • 內(nèi)部類極其訪問特點(diǎn)
class Demo1_InnerClass {
    public static void main(String[] args) {
        //Inner i = new Inner();
        //i.method();
        //外部類名.內(nèi)部類名 = 外部類對象.內(nèi)部類對象
        Outer.Inner oi = new Outer().new Inner();           //創(chuàng)建內(nèi)部類對象
        oi.method();

    }
}

/*
* A:內(nèi)部類概述
* B:內(nèi)部類訪問特點(diǎn)
    * a:內(nèi)部類可以直接訪問外部類的成員,包括私有统翩。
    * b:外部類要訪問內(nèi)部類的成員,必須創(chuàng)建對象此洲。
    * 外部類名.內(nèi)部類名 對象名 = 外部類對象.內(nèi)部類對象;
* C:案例演示
    * 內(nèi)部類極其訪問特點(diǎn)
*/

class Outer {
    private int num = 10;
    class Inner {
        public void method() {
            System.out.println(num);
        }
    }
}

10.09_面向?qū)ο?成員內(nèi)部類私有使用)(了解)

  • private
class Demo2_InnerClass {
    public static void main(String[] args) {
        //Outer.Inner oi = new Outer().new Inner();
        //oi.method();

        Outer o = new Outer();
        o.print();
    }
}

class Outer {
    private int num = 10;
    private class Inner {
        public void method() {
            System.out.println(num);
        }
    }

    public void print() {
        Inner i = new Inner();
        i.method();
    }
}

10.10_面向?qū)ο?靜態(tài)成員內(nèi)部類)(了解)

  • static
  • B:成員內(nèi)部類被靜態(tài)修飾后的訪問方式是:
    • 外部類名.內(nèi)部類名 對象名 = 外部類名.內(nèi)部類對象;
class Demo1_InnerClass {
    public static void main(String[] args) {
        //外部類名.內(nèi)部類名 對象名 = 外部類名.內(nèi)部類對象;
        Outer.Inner oi = new Outer.Inner();
        oi.method();

        Outer.Inner2.print();
    }
}

class Outer {
    static class Inner {
        public void method() {
            System.out.println("method");
        }
    }

    static class Inner2 {
        public static void print() {
            System.out.println("print");
        }
    }
}

10.11_面向?qū)ο?成員內(nèi)部類的面試題)(掌握)

  • A:面試題
  •   要求:使用已知的變量厂汗,在控制臺輸出30,20呜师,10娶桦。
      
      class Outer {
          public int num = 10;
          class Inner {
              public int num = 20;
              public void show() {
                  int num = 30;
                  System.out.println(?);
                  System.out.println(??);
                  System.out.println(???);
              }
          }
      }
      class InnerClassTest {
          public static void main(String[] args) {
              Outer.Inner oi = new Outer().new Inner();
              oi.show();
          }   
      }
    
class Test1_InnerClass {
    public static void main(String[] args) {
        Outer.Inner oi = new Outer().new Inner();
        oi.show();
    }
}
//要求:使用已知的變量,在控制臺輸出30,20衷畦,10栗涂。
//內(nèi)部類之所以能獲取到外部類的成員,是因?yàn)樗塬@取到外部類的引用外部類名.this
class Outer {
    public int num = 10;
    class Inner {
        public int num = 20;
        public void show() {
            int num = 30;
            System.out.println(num);
            System.out.println(this.num);
            System.out.println(Outer.this.num);
        }
    }
}

10.12_面向?qū)ο?局部內(nèi)部類訪問局部變量的問題)(掌握)

  • A:案例演示
    • 局部內(nèi)部類訪問局部變量必須用final修飾

    • 局部內(nèi)部類在訪問他所在方法中的局部變量必須用final修飾,為什么?
      因?yàn)楫?dāng)調(diào)用這個方法時,局部變量如果沒有用final修飾,他的生命周期和方法的生命周期是一樣的,當(dāng)方法彈棧,這個局部變量也會消失,那么如果局部內(nèi)部類對象還沒有馬上消失想用這個局部變量,就沒有了,如果用final修飾會在類加載的時候進(jìn)入常量池,即使方法彈棧,常量池的常量還在,也可以繼續(xù)使用

      但是jdk1.8取消了這個事情,所以我認(rèn)為這是個bug

class Demo1_InnerClass {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();
    }
}
//局部內(nèi)部類
class Outer {
    public void method() {
        final int num = 10;
        class Inner {
            public void print() {
                System.out.println(num);
            }
        }

        Inner i = new Inner();
        i.print();
    }

    /*public void run() {
        Inner i = new Inner();              //局部內(nèi)部類,只能在其所在的方法中訪問
        i.print();
    }*/
}

10.13_面向?qū)ο?匿名內(nèi)部類的格式和理解)

  • A:匿名內(nèi)部類
    • 就是內(nèi)部類的簡化寫法。
  • B:前提:存在一個類或者接口
    • 這里的類可以是具體類也可以是抽象類祈争。
  • C:格式:
  •   new 類名或者接口名(){
          重寫方法;
      }
    
  • D:本質(zhì)是什么呢?
    • 是一個繼承了該類或者實(shí)現(xiàn)了該接口的子類匿名對象斤程。
  • E:案例演示
    • 按照要求來一個匿名內(nèi)部類
class Demo1_NoNameInnerClass {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();
    }
}
/*
* A:匿名內(nèi)部類
    * 就是內(nèi)部類的簡化寫法。
* B:前提:存在一個類或者接口
    * 這里的類可以是具體類也可以是抽象類菩混。
* C:格式:
* 
        new 類名或者接口名(){
            重寫方法;
        }
* D:本質(zhì)是什么呢?
    * 是一個繼承了該類或者實(shí)現(xiàn)了該接口的子類匿名對象忿墅。
* E:案例演示
    * 按照要求來一個匿名內(nèi)部類
*/

interface Inter {
    public void print();
}

class Outer {
    class Inner implements Inter {
        public void print() {
            System.out.println("print");
        }
    }

    public void method(){
        //Inner i = new Inner();
        //i.print();
        //new Inner().print();
        //Inter i = new Inner();            //父類引用指向子類對象
        
        new Inter() {                       //實(shí)現(xiàn)Inter接口
            public void print() {           //重寫抽象方法
                System.out.println("print");
            }
        }.print();
    }
}

10.14_面向?qū)ο?匿名內(nèi)部類重寫多個方法調(diào)用)

  • A:案例演示
    • 匿名內(nèi)部類的方法調(diào)用
class Demo2_NoNameInnerClass {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();
    }
}

interface Inter {
    public void show1();
    public void show2();
}
//匿名內(nèi)部類只針對重寫一個方法時候使用
class Outer {
    public void method() {
        /*new Inter(){
            public void show1() {
                System.out.println("show1");
            }

            public void show2() {
                System.out.println("show2");
            }
        }.show1();

        new Inter(){
            public void show1() {
                System.out.println("show1");
            }

            public void show2() {
                System.out.println("show2");
            }
        }.show2();*/

        Inter i = new Inter(){
            public void show1() {
                System.out.println("show1");
            }

            public void show2() {
                System.out.println("show2");
            }

            /*public void show3() {
                System.out.println("show3");
            }*/
        };

        i.show1();
        i.show2();
        //i.show3();                        //匿名內(nèi)部類是不能向下轉(zhuǎn)型的,因?yàn)闆]有子類類名
    }
}

10.15_面向?qū)ο?匿名內(nèi)部類在開發(fā)中的應(yīng)用)

  • A:代碼如下
  •   //這里寫抽象類,接口都行
      abstract class Person {
          public abstract void show();
      }
    
      class PersonDemo {
          public void method(Person p) {
              p.show();
          }
      }
    
      class PersonTest {
          public static void main(String[] args) {
              //如何調(diào)用PersonDemo中的method方法呢?
              PersonDemo pd = new PersonDemo ();
              
          }
      }
    
class Test1_NoNameInnerClass {
    public static void main(String[] args) {
        //如何調(diào)用PersonDemo中的method方法呢?
        PersonDemo pd = new PersonDemo ();
        //pd.method(new Student());
        pd.method(new Person() {
            public void show() {
                System.out.println("show");
            }
        });
    }
}
//這里寫抽象類沮峡,接口都行
abstract class Person {
    public abstract void show();
}

class PersonDemo {
    
    //public void method(Person p) {        //Person p = new Student();     //父類引用指向子類對象
    /*
    Person p = new Person(){
        public void show() {
            System.out.println("show");
        }
    };
    */
    public void method(Person p) {
        p.show();
    }
}

class Student extends Person {
    public void show() {
        System.out.println("show");
    }
}

10.16_面向?qū)ο?匿名內(nèi)部類的面試題)

  • A:面試題
  •   按照要求疚脐,補(bǔ)齊代碼
      interface Inter { void show(); }
      class Outer { //補(bǔ)齊代碼 }
      class OuterDemo {
          public static void main(String[] args) {
                Outer.method().show();
            }
      }
      要求在控制臺輸出”HelloWorld”
    
class Test2_NoNameInnerClass {
    public static void main(String[] args) {
        //Outer.method().show();            //鏈?zhǔn)骄幊?每次調(diào)用方法后還能繼續(xù)調(diào)用方法,證明調(diào)用方法返回的是對象
        Inter i = Outer.method();
        i.show();
    }
}
//按照要求,補(bǔ)齊代碼
interface Inter { 
    void show(); 
}

class Outer { 
    //補(bǔ)齊代碼 
    public static Inter method() {
        return new Inter() {
            public void show() {
                System.out.println("show");
            }
        };
    }
}

//要求在控制臺輸出”HelloWorld”

10.17_day10總結(jié)

  • 把今天的知識點(diǎn)總結(jié)一遍邢疙。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棍弄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子疟游,更是在濱河造成了極大的恐慌呼畸,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乡摹,死亡現(xiàn)場離奇詭異役耕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)聪廉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門瞬痘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人板熊,你說我怎么就攤上這事框全。” “怎么了干签?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵津辩,是天一觀的道長。 經(jīng)常有香客問我容劳,道長喘沿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任竭贩,我火速辦了婚禮蚜印,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘留量。我一直安慰自己窄赋,他們只是感情好哟冬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著忆绰,像睡著了一般浩峡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上错敢,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天翰灾,我揣著相機(jī)與錄音,去河邊找鬼伐债。 笑死预侯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的峰锁。 我是一名探鬼主播萎馅,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼虹蒋!你這毒婦竟也來了糜芳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤魄衅,失蹤者是張志新(化名)和其女友劉穎峭竣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晃虫,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡皆撩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了哲银。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扛吞。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖荆责,靈堂內(nèi)的尸體忽然破棺而出滥比,到底是詐尸還是另有隱情,我是刑警寧澤做院,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布盲泛,位于F島的核電站,受9級特大地震影響键耕,放射性物質(zhì)發(fā)生泄漏寺滚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一屈雄、第九天 我趴在偏房一處隱蔽的房頂上張望玛迄。 院中可真熱鬧,春花似錦棚亩、人聲如沸蓖议。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勒虾。三九已至,卻和暖如春瘸彤,著一層夾襖步出監(jiān)牢的瞬間修然,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工质况, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愕宋,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓结榄,卻偏偏與公主長得像中贝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子臼朗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

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

  • Win7下如何打開DOS控制臺邻寿? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,589評論 4 12
  • 面向?qū)ο笾饕槍γ嫦蜻^程。 面向過程的基本單元是函數(shù)视哑。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,046評論 0 4
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法绣否,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,214評論 0 2
  • 10.01_面向?qū)ο?package關(guān)鍵字的概述及作用)(了解) A:為什么要有包將字節(jié)碼(.class)進(jìn)行分類...
    苦笑男神閱讀 342評論 0 1
  • 昨天跪呈,一個姐妹跟我吐槽段磨,再這樣下去啊,真的要瘋了庆械,以前吧薇溃,因?yàn)楣ぷ鞲瞎€沒覺得有啥問題,這會天天一塊基本都要吵架...
    虎嗅薔薇_6a3b閱讀 511評論 0 1