内部类的使用
類的內部成員之五:內部類
1. Java中允許將一個類A聲明在另一個類B中,則類A就是內部類,類B稱為外部類
2.內部類的分類:成員內部類(靜態、非靜態) vs 局部內部類(方法內、代碼塊內、構造器內)
3.成員內部類:一方面,作為外部類的成員:>調用外部類的結構>可以被static修飾>可以被4種不同的權限修飾另一方面,作為一個類:> 類內可以定義屬性、方法、構造器等> 可以被final修飾,表示此類不能被繼承。言外之意,不使用final,就可以被繼承> 可以被abstract修飾
4.關注如下的3個問題4.1 如何實例化成員內部類的對象4.2 如何在成員內部類中區分調用外部類的結構4.3 開發中局部內部類的使用 見《InnerClassTest1.java》
package com.wdl.day15;public class InnerClassTest {public static void main(String[] args) {//創建Dog實例(靜態的成員內部類):Person.Dog dog = new Person.Dog();dog.show();//創建Bird實例(非靜態的成員內部類):
// Person.Bird bird = new Person.Bird();//錯誤的Person p = new Person();Person.Bird bird = p.new Bird();bird.sing();System.out.println();bird.display("黃鸝");}
}class Person{String name = "小明";int age;public void eat(){System.out.println("人:吃飯");}//靜態成員內部類static class Dog{String name;int age;public void show(){System.out.println("卡拉是條狗");
// eat();}}//非靜態成員內部類class Bird{String name = "杜鵑";public Bird(){}public void sing(){System.out.println("我是一只小小鳥");Person.this.eat();//調用外部類的非靜態屬性eat();System.out.println(age);}public void display(String name){System.out.println(name);//方法的形參System.out.println(this.name);//內部類的屬性System.out.println(Person.this.name);//外部類的屬性}}public void method(){//局部內部類class AA{}}{//局部內部類class BB{}}public Person(){//局部內部類class CC{}}}
使用
package com.wdl.day15;public class InnerClassTest1 {//開發中很少見public void method(){//局部內部類class AA{}}//返回一個實現了Comparable接口的類的對象public Comparable getComparable(){//創建一個實現了Comparable接口的類:局部內部類//方式一: // class MyComparable implements Comparable{ // // @Override // public int compareTo(Object o) { // return 0; // } // // } // // return new MyComparable();//方式二:return new Comparable(){@Overridepublic int compareTo(Object o) {return 0;}};}}注意點
在局部內部類的方法中(比如:show)如果調用局部內部類所聲明的方法(比如:method)中的局部變量(比如:num)的話,要求此局部變量聲明為final的。
jdk 7及之前版本:要求此局部變量顯式的聲明為final的
jdk 8及之后的版本:可以省略final的聲明
總結
總結
- 上一篇: Java8中接口的新特性
- 下一篇: 尖头蚂蚱的外形特点 这里有关于它的简单介