您的当前位置:首页正文

内部类的基本使用

2024-11-10 来源:个人技术集锦


一、内部类分类

        成员内部类(static成员内部类和非static成员内部类)

        局部内部类(不谈修饰符)、

        匿名内部类

二、内部类的声明

        class 外部类{

                方法(){

               class 局部内部类{
                        }
                }
               {
                        class 局部内部类{
                        }
                }
        }

三、成员内部类

3.1非static成员内部类

代码举例:

class First {
    private  int a=1;
    public class Second{
        private int b = 2;
        public void f1(){
            System.out.println("我是内部类");
            System.out.println(a);
            System.out.println(b);
        }
    }
    public void f2(){
        System.out.println("我是外部类");
        System.out.println(a);
    }

}
public class Main{
    public static void main(String[] args) {
        First fi = new First();
        First.Second fi2 = new First().new Second();
        fi.f2();
        fi2.f1();
    }
}

3.2static成员内部类

代码举例:

class  Main {
    private  static int a=1;
    public static class Second{
        private int b = 2;
        public void f1(){
            System.out.println("我是内部类");
            System.out.println(a);
            System.out.println(b);
        }
    }
    public void f2(){
        System.out.println("我是外部类");
        System.out.println(a);
    }

}
public class test31{
    public static void main(String[] args) {
        First fi = new First();
        First.Second f2 = new First.Second();
        fi.f2();
        f2.f1();
    }
}

四、局部内部类

代码举例:

class  Main{
    private  int a=1;
    public void f1(){
        class Second{
            private int b = 2;
            public void f3(){
                System.out.println("我是内部类");
                System.out.println(a);
                System.out.println(b);
            }

        }
        Second s = new Second();
        s.f3();
    }
    public void f2(){
        System.out.println("我是外部类");
        System.out.println(a);
    }
}
public class test31{
    public static void main(String[] args) {
        First fi = new First();
        fi.f1();
        fi.f2();
    }
}

五、匿名内部类

匿名内部类实现接口

代码举例:

interface f{
    public abstract void getnum();
}
public class test31{
    public static void main(String[] args) {
        new test31().f1(new f(){
            private int b = 2;

            public void getnum(){

                System.out.println("匿名内部类");
                System.out.println(b);
            }
        });
    }
    public void f1(f a){
        a.getnum();
    }
}

六、内部类使用注意事项

6.1匿名的内部类是没有名字的内部类。不能继承其它类。

6.2静态内部类可以有静态成员,而非静态内部类则不能有静态成员。

6.3局部内部类和局部变量地位类似,不能使用public,protected,缺省,private。

6.4局部内部类不能使用static修饰,也不能包含静态成员。

6.5 局部内部类可以使用外部方法的局部变量,但是必须是final的。

6.6成员内部类可以直接使用外部类的所有成员,包括私有的数据。

6.7当想要在外部类的静态成员部分使用内部类时,可以考虑内部类声明为静态的。

显示全文