1. 程式人生 > >java 類的成員之五 內部類

java 類的成員之五 內部類

java 類的成員之五 內部類

1. *類的第五個成員:內部類

  1. 相當於說,我們可以在類的內部再定義類,外面的類:外部類,裡面的類:內部類

  2. 內部類的分類:成員內部類(宣告在類內部且在方法外的) VS 區域性內部類(宣告在類的方法裡)

  3. 成員內部類:
    3.1是外部類的一個成員:①可以有修飾符(四個)②static final ③可以呼叫外部類的屬性、方法

    3.2具有類的特點:①abstract②還可以在其內部定義屬性、方法、構造器

  4. 區域性內部類:
    4.1區域性內部類的使用

  5. 要點掌握:
    ①如何建立成員內部類的物件(如:如建立Bird類和Dog類的物件)
    ②如何區分呼叫外部類、內部類的變數(尤其是變數重名的時候)

public class TestInnerClass {
	public static void main(String[] args) {
		//建立靜態內部類的物件:可以直接通過外部類呼叫靜態內部類的構造器
		Person.Dog dog = new Person.Dog();
		
//		Person.Bird b = new Person.Bird();
		//建立非靜態的內部類的物件:必須先建立外部類的物件,通過外部類物件呼叫內部類的構造器
		Person p = new Person();
		Person.Bird b = p.new Bird();
		b.info();
		b.setName("黃鸝");
	}
}
class Person{
	String name = "填弟";
	int age;
	//成員內部類非static
	class Bird{
		String name = "杜鵑";
		int id;
		public Bird() {
			
		}
		public void setName(String name) {
			System.out.println(name);//黃鸝
			System.out.println(this.name);//杜鵑
			System.out.println(Person.this.name);//填弟
		}
		public void info() {
			show();
		}
	}
	//成員內部類(靜態內部類)
	static  class Dog{
		
	}
	public void show() {
		System.out.println("我是外部類的show方法");
	}
	public void method1() {
		class A{
			
		}
	}
	
}

③區域性內部類的使用

/*
 * 關於區域性內部類的使用
 */
public class TestInnerClass1 {

}
class OuterClass{
	//區域性內部類,如下的使用方式較少
	public void mecthod1() {
		
		class InnerClass{
			
		}
	}
	//方式一:常常使用一個方法,使其放回值為某個類或某個介面的物件,而這個類或介面在方法內建立
	public Comparable getComparable() {
		//1.建立一個實現Comparable介面的類:區域性內部類
		class MyComparable implements Comparable{

			@Override
			public int compareTo(Object o) {
				// TODO Auto-generated method stub
				return 0;
			}
			
		}
		//2.返回一個實現類的物件
		return new MyComparable();
	}
	//方式二:實現匿名類物件的建立
	public Comparable getComparable1() {
		//返回一個實現Comparable介面的匿名類物件
		return new Comparable() {

			@Override
			public int compareTo(Object o) {
				// TODO Auto-generated method stub
				return 0;
			}
			
		};
	}
	
}
  1. 注:Thread類有內部類enum State {}表示執行緒的狀態