面接問題の分析:8 JAVAの中で4種類の内部類の詳しい分析

2725 ワード

1.静的内部クラス:
理解方法:静的内部クラスを静的方法として考えることができ、理解が容易になります.
demo:
package com.InnerClass;
/**
 *auther:fighter24h
 *email:[email protected]
 *     
 */
public class StaticClassDemo {

	public static void main(String[] args) {
//		       
		Demo.Inner inner = new Demo.Inner();
		inner.sayHallo();
	}
}
//       
class Demo
{
	public static int data = 4;
	/**
	 * 
	 * @author fighrer24h
	 *     :
	 *                      
	 */
	public static class Inner
	{
		public void sayHallo()
		{
			System.out.println("hallo");
		}
	}
}

2.メンバー内部クラス
理解方法:メンバー内部クラスはメンバー変数として理解でき、使用時にもメンバー変数として使用されます.
demo:
package com.InnerClass;
/**
 *auther:fighter24h
 *email:[email protected]
 */
public class MemberInnerClass {

	public static void main(String[] args) {
		MemberClassDemo mcd = new MemberClassDemo();
//		          
		/**
		 *                  :
		 *      :
		 *                ,            public      
		 *   ,              
		 *   ,     “      ”,  ,          new  
		 *       new ?           ,             !
		 */
		mcd.new MemberClass().say();
		
//		  
		MemberClassDemo.MemberClass inner = new MemberClassDemo().new MemberClass();
		inner.say();
	}
}
//          
class MemberClassDemo
{
	private String message = "hallo";

	/**
	 *  @author fighter24h
	 *                 !
	 */
	public class MemberClass
	{
		public void say()
		{
			System.out.println(message);
		}
	}
	public class MemberClass2
	{
		private String message = "word";
		public void say()
		{
//			         "word"
			System.out.println(message);
//			                  ?         ,        "hallo"
			System.out.println(MemberClassDemo.this.message);
		}
	}
}

3.ローカル内部クラス
理解:ローカル内部クラスをローカル変数として理解すればよい.また、ローカル内部クラスはエンドステータスにアクセスする変数にしかアクセスできないことに注意してください.なぜですか.
次のように解釈されます.
(1)まず,局所内部クラスであっても,それはクラスである.
(2)我々の局所内部クラスが初期化されていない場合,局所変数の値が何であるかをどのように知るのか.ここではjvmに関して皆さんが理解していなくてもあまり関係ありません
package com.InnerClass;
/**
 *auther:fighter24h
 *email:[email protected]
 *     
 */
public class LocalClassDemo {

	public static void main(String[] args) {
		LocalClass lc = new LocalClass();
		lc.say();
	}
}
class LocalClass
{
	public void say()
	{
		/**
		 * 
		 * @author fighter24h
		 *     :
		 *                   
		 *         ,                
		 *                  
		 */
		class Demo
		{
			public void sayWhat()
			{
				System.out.println("Local Inner Class");
			}
		}
		/**
		 *   ,                
		 */
		Demo demo = new Demo();
		demo.sayWhat();
	}
}

4.匿名内部クラス
匿名の内部クラスは名前のない内部クラスです
使用方法:
public void method(new Father(){.....})
{
}