三つのjava内部クラスとその応用シーン

25817 ワード

   :
	     
	     
	     
            ,             .class  ,
             $ 
             ,            
,                    ,     private。
(1)メンバー内部クラス
import IO_liu.Outer.Inner;

public class IO_liu {
	public static void main(String[] args) {
//		     
//		     ,            ,      
//		Outer o = new Outer();
//		o.method();
//		     
		Outer.Inner cry = new Outer().new Inner();
		cry.function();
	}
	
}
class Outer{
//	     
	private String num = "               ";
	public void method() {
//		                     
		Inner i = new Inner();
		i.function();
		System.out.println("          ");
	}
	class Inner{
		public void function() {
			System.out.println("               !"+num);
		}
	}
}
メンバー内部のprvateの飾り付けに注意する点:
package IO_liu;

import IO_liu.Outer.Inner;
//         :
//		                   ,      private     ,            

public class com {

	public static void main(String[] args) {
//		                 ,      ,               
		Outer2.Inner2 i = new Outer2().new Inner2();

	}

}
class Outer2{
	public void method() {
		Inner2 i = new Inner2();
	}
//	             public,      private,               
	private class Inner2{
		public void function() {
			System.out.println("function");
		}
	}
}

staticを使ってメンバー内部を修飾する:
public class com {

	public static void main(String[] args) {
//		              ,                
//          ,             
		Outer2.Inner2.function();

	}

}
class Outer2{
	public void method() {
		Inner2 i = new Inner2();
	}
//	             public,      private,               
	static class Inner2{
		public static void function() {
			System.out.println("function");
		}
	}
}
(2)局所内部類
//         ,         ,
//                   
public class com {
	public static void main(String[] args) {
		Outer o = new Outer();
		o.method();
	}

}

class Outer {
	public void method() {
		class Inner{
			public void function() {
				System.out.println("function");
			}
		}
		
		Inner inner = new Inner();
		inner.function();
	}
	public void test() {
		
	}
}
(3)匿名内部クラスの2つのフォーマットのうち、最初のフォーマットは対象として一度に使うしかないです。
package IO_liu;

/*
 *                    
 *        
 *                    
 *   :
 * 		new  /  (){
 * 			               ,           
 * 			                 ,               
 * 		};
 *   :                              
*/
public class com {
	public static void main(String[] args) {
		Outer o = new Outer();
		o.method();
	}

}
//    
interface Inner{
	public void function();
}

class Outer{
	public void method() {
//		      
		new Inner() {

			@Override
			public void function() {
				System.out.println("      ,    ");
			}
			
		}.function();

	}
}


もう一つのフォーマット:複数の呼び出しが可能です。
package IO_liu;

/*
 *                    
 *        
 *                    
 *   :
 * 		new  /  (){
 * 			               ,           
 * 			                 ,               
 * 		};
 *   :                              
*/
public class com {
	public static void main(String[] args) {
		Outer o = new Outer();
		o.method();
	}

}
//    
interface Inner{
	public void function();
}

class Outer{
	public void method() {
//		      
		Inner i = new Inner() {

			@Override
			public void function() {
				System.out.println("      ,    ");
			}
			
		};
		//        
		i.function();
		i.function();

	}
}
匿名の内部クラスの役割:
package IO_liu;
/*
 * 
 *           :
 *         
*/

public class com {
	public static void main(String[] args) {
		method(new Dog());
		method(new cat());
	}
	
	public static void method(Animal a) {
		a.eat();
	}

}



package IO_liu;

public interface Animal {

	public abstract void eat();

}

package IO_liu;

public class Dog implements Animal{

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

package IO_liu;

public class cat implements Animal{

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

}