国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

內(nèi)部類,實(shí)際開發(fā)中的應(yīng)用體現(xiàn)

2019-11-15 00:14:40
字體:
供稿:網(wǎng)友
內(nèi)部類,實(shí)際開發(fā)中的應(yīng)用體現(xiàn)

定義:放在一個(gè)類的內(nèi)部的類我們就叫內(nèi)部類。

  在java中,可以將一個(gè)類定義在另一個(gè)類里面或者一個(gè)方法里面,這樣的類稱為內(nèi)部類。內(nèi)部類仍然是一個(gè)獨(dú)立的類,在編譯之后內(nèi)部類會(huì)被編譯成獨(dú)立的.class文件,但是前面冠以外部類的類名和$符號(hào)。

  內(nèi)部類是一個(gè)編譯時(shí)的概念,一旦編譯成功,就會(huì)成為完全不同的兩類。對(duì)于一個(gè)名為outer的外部類和其內(nèi)部定義的名為inner的內(nèi)部類。編譯完成后出現(xiàn)outer.class和outer$inner.class兩類。所以內(nèi)部類的成員變量/方法名可以和外部類的相同。

  內(nèi)部類可以是靜態(tài)static的,也可用public,default,PRotected和private修飾。(而外部頂級(jí)類即類名和文件名相同的只能使用public和default

分類:1.成員內(nèi)部類2.靜態(tài)內(nèi)部類 3.匿名內(nèi)部類 4.方法內(nèi)部類(幾乎不用)

作用:間接解決多重繼承的問題(內(nèi)部類繼承一個(gè)類,外部類繼承一個(gè)類,實(shí)現(xiàn)多繼承。最重要的作用);

   內(nèi)部類擁有外圍類的所有元素的訪問權(quán)限;


  成員內(nèi)部類,顧名思義,就是在一個(gè)類的內(nèi)部定義一個(gè)類,作為類的一個(gè)成員屬性(成員字段),類的成員內(nèi)部類可以訪問該類的屬性和方法,因?yàn)樗彩窃擃惖囊粋€(gè)成員。

  要注意的是,成員內(nèi)部類不能含有static的變量和方法。因?yàn)槌蓡T內(nèi)部類需要先創(chuàng)建了外部類,才能創(chuàng)建它自己的,了解這一點(diǎn),就可以明白更多事情,在此省略更多的細(xì)節(jié)了。

  上代碼:

  

package 內(nèi)部類.成員內(nèi)部類;public class Person {public void sayPerson(){System.out.println("hello Person");}}

  

package 內(nèi)部類.成員內(nèi)部類;public class Student extends Person {private int age;public int getAge(){return age;}public void say(){System.out.println("hello Student");}private Grade1 getGrade1() {         return new Grade1(); //建議用這種方式實(shí)例化    }     private class Grade1{public void say(){Student.this.sayPerson();//內(nèi)部類調(diào)用外部類的成員Student.this.say();System.out.println(Student.this.getAge());System.out.println("hello Grade1");}}public static void main(String[] args) {Student stu = new Student();Student.Grade1 grade1 = stu.getGrade1();//Student.Grade1 grade2 = stu.new Grade1();兩種實(shí)例化內(nèi)部類的方式grade1.say();}}

 


靜態(tài)內(nèi)部類:顧名思義內(nèi)部類是靜態(tài)的,這樣的好處是不用拿到外部類對(duì)象就可以實(shí)例化內(nèi)部類了,但是這樣的話,內(nèi)部類就不能引用外部類的靜態(tài)成員了(人無完人?。?/p>

上代碼 eg:HashMap 中的 Entry

package 內(nèi)部類.靜態(tài)內(nèi)部類;public class Test {      public int age=1;      public static String name="shaolin";      static class Baby{  //靜態(tài)內(nèi)部類        public void say()          {          //System.out.println(age);不能訪問age屬性,只能訪問靜態(tài)屬性(很容易理解)            System.out.println("hello "+name);          }      }        public static void main(String[] args) {          Test.Baby temp=new Test.Baby();  //實(shí)例化靜態(tài)內(nèi)部類          temp.say();      }  }   

  


匿名內(nèi)部類,顧名思義就是沒有名字的內(nèi)部類

上代碼

package 內(nèi)部類.匿名內(nèi)部類;public class Test {      public static void main(String[] args) {              //相當(dāng)繼承Mother類并實(shí)現(xiàn)抽象方法      Person person=new Person(){@Overridepublic void say() {System.out.println("hello,匿名內(nèi)部類");}          };          person.say();    }  }    abstract class Person{  //也可以是一個(gè)interface的    public abstract void say();  }  

  


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 灵宝市| 西乡县| 大安市| 阜南县| 马边| 阿图什市| 新竹市| 玉环县| 白河县| 磴口县| 新宁县| 湛江市| 马尔康县| 嘉义市| 日土县| 晋中市| 永仁县| 江永县| 夏津县| 屏东县| 蓝山县| 闻喜县| 芦山县| 长岛县| 通海县| 介休市| 威海市| 积石山| 洪洞县| 梅河口市| 定结县| 称多县| 皋兰县| 武宁县| 依安县| 天柱县| 康平县| 山阴县| 夏津县| 休宁县| 宜城市|