Java中4种类型的内部类 .

在Java中有4种不同类型的内部类可以使用。下面给出它们的名称和例子。

1.静态嵌套类(Static Nested Classes)

  1. class Outer {  
  2.     static class Inner {  
  3.         void go() {  
  4.             System.out.println("Inner class reference is: " + this);  
  5.         }  
  6.     }  
  7. }  
  8.    
  9. public class Test {  
  10.     public static void main(String[] args) {  
  11.         Outer.Inner n = new Outer.Inner();  
  12.         n.go();  
  13.     }  
  14. }  
class Outer {
	static class Inner {
		void go() {
			System.out.println("Inner class reference is: " + this);
		}
	}
}
 
public class Test {
	public static void main(String[] args) {
		Outer.Inner n = new Outer.Inner();
		n.go();
	}
}

输出:Inner class reference is: Outer$Inner@19e7ce87

2.成员内部类(Member Inner Class)

成员类是特定于实例的。它可以访问所有方法,字段和外部类本身的引用。

  1. public class Outer {  
  2.     private int x = 100;  
  3.    
  4.     public void makeInner(){  
  5.         Inner in = new Inner();  
  6.         in.seeOuter();  
  7.     }  
  8.    
  9.     class Inner{  
  10.         public void seeOuter(){  
  11.             System.out.println("Outer x is " + x);  
  12.             System.out.println("Inner class reference is " + this);  
  13.             System.out.println("Outer class reference is " + Outer.this);  
  14.         }  
  15.     }  
  16.    
  17.     public static void main(String [] args){  
  18.         Outer o = new Outer();  
  19.         Inner i = o.new Inner();  
  20.         i.seeOuter();  
  21.     }  
  22. }  
public class Outer {
    private int x = 100;
 
    public void makeInner(){
        Inner in = new Inner();
        in.seeOuter();
    }
 
    class Inner{
        public void seeOuter(){
            System.out.println("Outer x is " + x);
            System.out.println("Inner class reference is " + this);
            System.out.println("Outer class reference is " + Outer.this);
        }
    }
 
    public static void main(String [] args){
    	Outer o = new Outer();
        Inner i = o.new Inner();
        i.seeOuter();
    }
}

输出:

Outer x is 100
Inner class reference is Outer$Inner@4dfd9726
Outer class reference is Outer@43ce67ca

 

3.局部方法内部类(Method-Local Inner Classes)

  1. public class Outer {  
  2.     private String x = "outer";  
  3.    
  4.     public void doStuff() {  
  5.         class MyInner {  
  6.             public void seeOuter() {  
  7.                 System.out.println("x is " + x);  
  8.             }  
  9.         }  
  10.    
  11.         MyInner i = new MyInner();  
  12.         i.seeOuter();  
  13.     }  
  14.    
  15.     public static void main(String[] args) {  
  16.         Outer o = new Outer();  
  17.         o.doStuff();  
  18.     }  
  19. }  
public class Outer {
	private String x = "outer";
 
	public void doStuff() {
		class MyInner {
			public void seeOuter() {
				System.out.println("x is " + x);
			}
		}
 
		MyInner i = new MyInner();
		i.seeOuter();
	}
 
	public static void main(String[] args) {
		Outer o = new Outer();
		o.doStuff();
	}
}

输出:x is outer

  1. public class Outer {  
  2.     private static String x = "static outer";  
  3.    
  4.     public static void doStuff() {  
  5.         class MyInner {  
  6.             public void seeOuter() {  
  7.                 System.out.println("x is " + x);  
  8.             }  
  9.         }  
  10.    
  11.         MyInner i = new MyInner();  
  12.         i.seeOuter();  
  13.     }  
  14.    
  15.     public static void main(String[] args) {  
  16.         Outer.doStuff();  
  17.     }  
  18. }  
public class Outer {
	private static String x = "static outer";
 
	public static void doStuff() {
		class MyInner {
			public void seeOuter() {
				System.out.println("x is " + x);
			}
		}
 
		MyInner i = new MyInner();
		i.seeOuter();
	}
 
	public static void main(String[] args) {
		Outer.doStuff();
	}
}

输出:x is static outer

4.匿名内部类(Anonymous Inner Classes)

当您需要给一个GUI应用程序窗口小部件加一个动作监听器时,匿名内部类就会经常被用到。

  1. button.addActionListener(new ActionListener(){  
  2.      public void actionPerformed(ActionEvent e){  
  3.          comp.setText("Button has been clicked");  
  4.      }  
  5. });  

    在Java中有4种不同类型的内部类可以使用。下面给出它们的名称和例子。

    1.静态嵌套类(Static Nested Classes)

    1. class Outer {  
    2.     static class Inner {  
    3.         void go() {  
    4.             System.out.println("Inner class reference is: " + this);  
    5.         }  
    6.     }  
    7. }  
    8.    
    9. public class Test {  
    10.     public static void main(String[] args) {  
    11.         Outer.Inner n = new Outer.Inner();  
    12.         n.go();  
    13.     }  
    14. }  
    class Outer {
    	static class Inner {
    		void go() {
    			System.out.println("Inner class reference is: " + this);
    		}
    	}
    }
     
    public class Test {
    	public static void main(String[] args) {
    		Outer.Inner n = new Outer.Inner();
    		n.go();
    	}
    }
    输出:Inner class reference is: Outer$Inner@19e7ce87

    2.成员内部类(Member Inner Class)

    成员类是特定于实例的。它可以访问所有方法,字段和外部类本身的引用。
    1. public class Outer {  
    2.     private int x = 100;  
    3.    
    4.     public void makeInner(){  
    5.         Inner in = new Inner();  
    6.         in.seeOuter();  
    7.     }  
    8.    
    9.     class Inner{  
    10.         public void seeOuter(){  
    11.             System.out.println("Outer x is " + x);  
    12.             System.out.println("Inner class reference is " + this);  
    13.             System.out.println("Outer class reference is " + Outer.this);  
    14.         }  
    15.     }  
    16.    
    17.     public static void main(String [] args){  
    18.         Outer o = new Outer();  
    19.         Inner i = o.new Inner();  
    20.         i.seeOuter();  
    21.     }  
    22. }  
    public class Outer {
        private int x = 100;
     
        public void makeInner(){
            Inner in = new Inner();
            in.seeOuter();
        }
     
        class Inner{
            public void seeOuter(){
                System.out.println("Outer x is " + x);
                System.out.println("Inner class reference is " + this);
                System.out.println("Outer class reference is " + Outer.this);
            }
        }
     
        public static void main(String [] args){
        	Outer o = new Outer();
            Inner i = o.new Inner();
            i.seeOuter();
        }
    }
    输出:

    Outer x is 100
    Inner class reference is Outer$Inner@4dfd9726
    Outer class reference is Outer@43ce67ca

     

    3.局部方法内部类(Method-Local Inner Classes)

    1. public class Outer {  
    2.     private String x = "outer";  
    3.    
    4.     public void doStuff() {  
    5.         class MyInner {  
    6.             public void seeOuter() {  
    7.                 System.out.println("x is " + x);  
    8.             }  
    9.         }  
    10.    
    11.         MyInner i = new MyInner();  
    12.         i.seeOuter();  
    13.     }  
    14.    
    15.     public static void main(String[] args) {  
    16.         Outer o = new Outer();  
    17.         o.doStuff();  
    18.     }  
    19. }  
    public class Outer {
    	private String x = "outer";
     
    	public void doStuff() {
    		class MyInner {
    			public void seeOuter() {
    				System.out.println("x is " + x);
    			}
    		}
     
    		MyInner i = new MyInner();
    		i.seeOuter();
    	}
     
    	public static void main(String[] args) {
    		Outer o = new Outer();
    		o.doStuff();
    	}
    }
    输出:x is outer
    1. public class Outer {  
    2.     private static String x = "static outer";  
    3.    
    4.     public static void doStuff() {  
    5.         class MyInner {  
    6.             public void seeOuter() {  
    7.                 System.out.println("x is " + x);  
    8.             }  
    9.         }  
    10.    
    11.         MyInner i = new MyInner();  
    12.         i.seeOuter();  
    13.     }  
    14.    
    15.     public static void main(String[] args) {  
    16.         Outer.doStuff();  
    17.     }  
    18. }  
    public class Outer {
    	private static String x = "static outer";
     
    	public static void doStuff() {
    		class MyInner {
    			public void seeOuter() {
    				System.out.println("x is " + x);
    			}
    		}
     
    		MyInner i = new MyInner();
    		i.seeOuter();
    	}
     
    	public static void main(String[] args) {
    		Outer.doStuff();
    	}
    }
    输出:x is static outer

    4.匿名内部类(Anonymous Inner Classes)

    当您需要给一个GUI应用程序窗口小部件加一个动作监听器时,匿名内部类就会经常被用到。
    1. button.addActionListener(new ActionListener(){  
    2.      public void actionPerformed(ActionEvent e){  
    3.          comp.setText("Button has been clicked");  
    4.      }  
    5. });  

      在Java中有4种不同类型的内部类可以使用。下面给出它们的名称和例子。

      1.静态嵌套类(Static Nested Classes)

      1. class Outer {  
      2.     static class Inner {  
      3.         void go() {  
      4.             System.out.println("Inner class reference is: " + this);  
      5.         }  
      6.     }  
      7. }  
      8.    
      9. public class Test {  
      10.     public static void main(String[] args) {  
      11.         Outer.Inner n = new Outer.Inner();  
      12.         n.go();  
      13.     }  
      14. }  
      class Outer {
      	static class Inner {
      		void go() {
      			System.out.println("Inner class reference is: " + this);
      		}
      	}
      }
       
      public class Test {
      	public static void main(String[] args) {
      		Outer.Inner n = new Outer.Inner();
      		n.go();
      	}
      }
      输出:Inner class reference is: Outer$Inner@19e7ce87

      2.成员内部类(Member Inner Class)

      成员类是特定于实例的。它可以访问所有方法,字段和外部类本身的引用。
      1. public class Outer {  
      2.     private int x = 100;  
      3.    
      4.     public void makeInner(){  
      5.         Inner in = new Inner();  
      6.         in.seeOuter();  
      7.     }  
      8.    
      9.     class Inner{  
      10.         public void seeOuter(){  
      11.             System.out.println("Outer x is " + x);  
      12.             System.out.println("Inner class reference is " + this);  
      13.             System.out.println("Outer class reference is " + Outer.this);  
      14.         }  
      15.     }  
      16.    
      17.     public static void main(String [] args){  
      18.         Outer o = new Outer();  
      19.         Inner i = o.new Inner();  
      20.         i.seeOuter();  
      21.     }  
      22. }  
      public class Outer {
          private int x = 100;
       
          public void makeInner(){
              Inner in = new Inner();
              in.seeOuter();
          }
       
          class Inner{
              public void seeOuter(){
                  System.out.println("Outer x is " + x);
                  System.out.println("Inner class reference is " + this);
                  System.out.println("Outer class reference is " + Outer.this);
              }
          }
       
          public static void main(String [] args){
          	Outer o = new Outer();
              Inner i = o.new Inner();
              i.seeOuter();
          }
      }
      输出:

      Outer x is 100
      Inner class reference is Outer$Inner@4dfd9726
      Outer class reference is Outer@43ce67ca

       

      3.局部方法内部类(Method-Local Inner Classes)

      1. public class Outer {  
      2.     private String x = "outer";  
      3.    
      4.     public void doStuff() {  
      5.         class MyInner {  
      6.             public void seeOuter() {  
      7.                 System.out.println("x is " + x);  
      8.             }  
      9.         }  
      10.    
      11.         MyInner i = new MyInner();  
      12.         i.seeOuter();  
      13.     }  
      14.    
      15.     public static void main(String[] args) {  
      16.         Outer o = new Outer();  
      17.         o.doStuff();  
      18.     }  
      19. }  
      public class Outer {
      	private String x = "outer";
       
      	public void doStuff() {
      		class MyInner {
      			public void seeOuter() {
      				System.out.println("x is " + x);
      			}
      		}
       
      		MyInner i = new MyInner();
      		i.seeOuter();
      	}
       
      	public static void main(String[] args) {
      		Outer o = new Outer();
      		o.doStuff();
      	}
      }
      输出:x is outer
      1. public class Outer {  
      2.     private static String x = "static outer";  
      3.    
      4.     public static void doStuff() {  
      5.         class MyInner {  
      6.             public void seeOuter() {  
      7.                 System.out.println("x is " + x);  
      8.             }  
      9.         }  
      10.    
      11.         MyInner i = new MyInner();  
      12.         i.seeOuter();  
      13.     }  
      14.    
      15.     public static void main(String[] args) {  
      16.         Outer.doStuff();  
      17.     }  
      18. }  
      public class Outer {
      	private static String x = "static outer";
       
      	public static void doStuff() {
      		class MyInner {
      			public void seeOuter() {
      				System.out.println("x is " + x);
      			}
      		}
       
      		MyInner i = new MyInner();
      		i.seeOuter();
      	}
       
      	public static void main(String[] args) {
      		Outer.doStuff();
      	}
      }
      输出:x is static outer

      4.匿名内部类(Anonymous Inner Classes)

      当您需要给一个GUI应用程序窗口小部件加一个动作监听器时,匿名内部类就会经常被用到。
      1. button.addActionListener(new ActionListener(){  
      2.      public void actionPerformed(ActionEvent e){  
      3.          comp.setText("Button has been clicked");  
      4.      }  
      5. });  
原文地址:https://www.cnblogs.com/-chaoming/p/6866542.html