JAVA基礎コース(14日目)

7156 ワード

JAVA基礎コース
14日目
内部クラス
(1)JavaであるクラスAを別のクラスBに宣言することを許可すると,クラスAは内部クラスであり,クラスBは外部クラスである.
(2)内部クラスの分類,メンバ内部クラス(静的,非静的)vs局所内部クラス(メソッド内,コードブロック内,コンストラクタ内)
(3)メンバー内部クラス
--外部クラスのメンバーとして
①外部クラスを呼び出す仕組み
②staticで修飾できる
③4種類の修飾子で修飾できる
--クラスとして
①クラス内で属性、メソッド、コンストラクタなどを定義できる
②はfinalで修飾することができ、このような継承ができないことを表す.final修飾を受けずに継承できます
③abstractで修飾できる
(4)次の3つの問題に注目
①メンバー内部クラスオブジェクトのインスタンス化
②外部クラスを呼び出す仕組みをメンバー内クラスで区別する方法
③開発におけるローカル内部クラスの使用
package com.test.course.inner;

/**
 * @author PitterWang
 * @create 2020/5/2
 * @since 1.0.0
 */
public class Animal {
	String name;
	public static int age;
	public void eat(){
		System.out.println("     ");
	}
	public void setName(String name){
		this.name = name;
	}
	/***
	 *     
	 */
	static class Dog{
		String name;
		public Dog(){
		}
		public void eat(){
			System.out.println("Dog  ");
		}

		public void getWhoName(){

			age = 12;
			//Animal.this.name = "Bird";//             
			//setName("Bird");//             
			this.eat();
		}
	}

	/***
	 *       
	 */
	 class Bird{

	 	String name;
	 	public Bird(){
		}

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

		public void getWhoName(){
			setName("Bird");
			Animal.this.name = "Bird";
			Animal.this.eat();
			this.eat();
	 	}
	}
}
package com.test.course.inner;

/**
 * 〈      〉
 * @author PitterWang
 * @create 2020/5/2
 * @since 1.0.0
 */
public class InnerClassTest {

	public static void main(String[] args) {
		/**
		 *          
		 */
		Animal.Dog dog = new Animal.Dog();
		dog.getWhoName();

		/***
		 *         
		 */
		Animal animal = new Animal();
		Animal.Bird bird = animal.new Bird();
		bird.getWhoName();
	}
}