JAVA_基礎內部類

內部類

java容許將一個類A聲明在另外一個類B中,則類A就是內部類,類B稱爲外部類java

內部類的分類:成員內部類(靜態內、非靜態內) VS 局部內部類(方法內、代碼塊內、構造器內)
外部類的成員
1)調用外部類的機構。
2)能夠用被static修飾。
3)能夠被四種不一樣的權限修飾。ide

做爲一個類
1)類內能夠定義屬性、方法、構造器等。
2)能夠被final修飾,表示此類不能被繼承。言外之意,不使用final就能夠被繼承。
3)能夠被abstract修飾,表示此類不能被實例化。與上面同理,不使用abstract就能被實例化。this

關注以下三個問題
1)如何實例化成員內部類的對象。
2)如何在成員內部類中區分調用外部類的結構。code

public class InnerClassTest {
	public static void main(String[] args) {
//		建立Dog實例(靜態的成員內部你)
		Person.Dog dog = new Person.Dog();
		dog.show();
		
//		建立Bird實例(非靜態的成員內部類)
		Person person = new Person();
		Person.Bird bird = person.new Bird();
		bird.sing();
		System.out.println();
		bird.display("黃鸝");
	}
}

class Person{
	
	String name = "庫森";
	int age;
	
	public void ead() {
		System.out.println("人:吃飯");
	}
	
	//靜態成員內部類
	static class Dog {
		String name;
		
		public Dog() {}
		
		public void show() {
			System.out.println("卡拉沙狗");
		}
	}
	
	//非靜態成員內部類
	class Bird{
		String name = "杜鵑";
		
		public Bird() {}
		
		public void sing() {
			System.out.println("我是一隻小小鳥");
			//調用外部類的一個方法
			Person.this.ead();	
		}
		public void display(String name) {
			System.out.println(name);//方法形參
			System.out.println(this.name);//內部類的name
			System.out.println(Person.this.name);//外部類的name
			System.out.println(age);//在沒有重名的狀況下能夠直接調用外部類的成員屬性
		}
	}
	
    public Person() {
		class CC {}//局部內部類
	}
	public void method() {
		class AA {}//局部內部類
	}
	{
		class BB {}//局部內部類
	}
    //修飾內部類
	abstract class Cat{}
	final class Snake{}
}

​ 3)開發中局部內部類的使用。對象

public class InnerClassTest1 {
	public Comparable getComparable() {
//		方式一:
		class MyComparable implements Comparable {
			@Override
			public int compareTo(Object o) {
				return 0;
			}
		}
		return new MyComparable();
//		方式二:
		return new Comparable() {
			@Override
			public int compareTo(Object o) {
				return 0;
			}
		};
	}
}
相關文章
相關標籤/搜索