Java 내부 클래스 분석

4251 단어
내부 클래스는 이미 정의된 클래스 내부에서class 키워드로 정의된 클래스 내부 클래스로 정적 내부 클래스, 비정적 내부 클래스(일반 내부 클래스)를 포함한다.국부 내부 클래스, 익명 내부 클래스

주요 결론:

  • 내부 클래스(정적 내부 클래스든 비정적 내부 클래스든)는 처음 사용할 때만 불러옵니다
  • 비정상적인 내부 클래스 대상의 창설은 외부 클래스 대상에 의존
  • 비정상적 내부류의 대상 은사는 외부류의 대상을 가리키는 인용
  • 을 가지고 있다.
  • 비정상적 내부 클래스는 외부 클래스 대상의 구성원 변수와 방법을 무제한으로 접근할 수 있다
  • 정적 내부 클래스는 코드 형식상 외부 클래스에 쓰일 뿐이지만 자바 가상 컴퓨터에서는 정적 클래스로 불러옵니다 외부 클래스와 무관합니다
  • 일반 내부 클래스와 정적 내부 클래스


    가장 뚜렷한 특징은 static로 수식할지 여부이다
    
    public class OutterClass {
        // 
        class InnerClass{   
        }
        // 
        static class InnerClass2{   
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
        }
    }
    

    주의: 정적 내부 클래스 앞에는static로 수식됩니다.일반 내부 클래스 일반 내부 클래스는 외부 클래스의 모든 구성원을 직접 방문할 수 있고 정적 내부 클래스는 비static 속성의 구성원을 직접 방문할 수 없으며 외부 대상의 인용을 사용해야 접근할 수 있습니다.
    다음은 일반 내부류와 정적 내부류의 실례화이다. 일반 내부류는 외부류의 실례를 이용하여 상응하는 내부류의 실례화를 해야 한다. 정적 내부류는 직접 실례화를 할 수 있다.
    public class OutterClass {
        private int a = 10;
        private static int b = 11;
        
        // 
        class InnerClass{
            void print(){
                // private 
                System.out.println(a);
            }
        }
        // 
        static class InnerClass2{
            void print(){
                // static 
                //System.out.println(a);
                // static 
                OutterClass out = new OutterClass();
                System.out.println(out.a);
                // static 
                System.out.println(b);
            }
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            // InnerClass2
            InnerClass2 in2 = new InnerClass2();
            in2.print();
            // 
            InnerClass in = new OutterClass().new InnerClass();
            in.print();
        }
    }
    

    국부 내부 클래스와 익명 내부 클래스


    국부 내부 클래스는 특정한 방법에 정의된 클래스 국부 내부 클래스가 외부 클래스의 모든 구성원, 방법의 국부 변수, 방법의 형상에 접근할 수 있도록 하는 것이다. 반드시final 수식(java SE8)이 필요하지 않지만 국부 변수가 2차 부여되지 않도록 해야 한다.국부 내부 클래스와 일반 내부 클래스는 비슷하다. 왜냐하면 그들은 모두 정적 구성원을 정의하거나 성명할 수 없기 때문이다. 만약에 국부 내부 클래스가 정적 방법에서 정의된다면 이 국부 내부 클래스는 접근 방법의 정적 구성원만 방문할 수 있다.인터페이스 자체가 정적 (inherently static) 이기 때문에 국부 내부 클래스에서 인터페이스를 설명할 수 없습니다.국부 내부 클래스는 정적 구성원을 포함할 수 없습니다. 이 정적 구성원이 상수가 아니라면 (final에 의해 수식됨)
    public void InnerClassFun(int k){
            int min = 70;
            class InnerClass3{
                // final 
                final static int c = 12;
                void print(){
                    // static static 
                    System.out.println(a);
                    System.out.println(b);
                    // 
                    System.out.println(min);
                    System.out.println(k);
                    System.out.println(c);
                }
            }
        }
    

    익명 내부 클래스는 이름이 없는 내부 클래스로 추상 클래스나 인터페이스 등 실례화할 수 없는 클래스의 확장에 사용된다. 가장 흔히 볼 수 있는 예는 클릭 이벤트와 루트의 오픈이다.
    ((Button) findViewById(R.id.start)).setOnClickListener(new Button.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
            new Thread() { 
     
                @Override 
                public void run() { 
                    // TODO Auto-generated method stub 
                } 
     
            }.start(); 
        } 
    }); 
    

    익명 내부 클래스는 접근 수식자를 추가할 수 없습니다.주의해야 할 것은 new 익명 클래스입니다. 이 클래스는 먼저 정의해야 합니다.
    public class OutterClass {
            public static void main(String[] args) {
            Inner in = new OutterClass().getInner("Beijing");
            System.out.println(in.getName());
          }
        public Inner getInner(final String name){
            return new Inner(){
                private String nameStr = name;
                public String getName(){
                    return nameStr;
                }   
            };
        }
        interface Inner{
            String getName();
        }
    }
    

    소재 방법의 형삼이 내부류에 사용되어야 할 때 이 형삼은final1이어야 한다.익명 내부류는 구조 방법이 있을 수 없다.   2.익명 내부 클래스는 정적 구성원, 방법, 클래스를 정의할 수 없습니다.   3.익명 내부 클래스는public,protected,private,static일 수 없습니다.4. 익명 내부 클래스의 실례만 만들 수 있습니다.5. 하나의 익명 내부 클래스는 반드시 new의 뒤에 있고 그 은밀함으로 하나의 인터페이스를 실현하거나 하나의 클래스를 실현한다.  6.익명 내부 클래스가 국부 내부 클래스이기 때문에 국부 내부 클래스의 모든 제한이 적용됩니다.
    참조 대상:http://www.jianshu.com/p/1faacbd5794f http://android.blog.51cto.com/268543/384844/내부 클래스의 마운트 시기는 자바에서 내부 클래스가 외부 클래스의 구성원에게 접근할 수 있는 이유를 깊이 이해한다

    좋은 웹페이지 즐겨찾기