Java内部类(详细整理

原博客链接:Java内部类(详细整理)

一.内部类

内部类主要定义在类的内部,定义内部类的作用,主要是因为不希望该类作为大家共同使用访问的类。

1.成员内部类

成员内部类就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private。
外部类要访问内部类的所有成员变量或方法,则需要通过内部类的对象来获取
注意:成员内部类不能含有 static 的变量和方法。

成员内部类的定义如下:

public class 外部类{
    public class 内部类{}
}

内部类的实例化:

外部类 对象 = new 外部类();
外部类.内部类 对象2=对象.new 内部类();

2.局部内部类

局部内部类是指内部类定义在方法和作用域内。通俗来说,就是在外部类的方法中定义的内部类就是局部内部类。

局部内部类由于是在方法中定义的,因此,其作用域也是在方法内部中,方法外执行到,则被JVM回收。局部内部类的实例化也只能在方法中进行。

示例:

    public class Method{
        public static void main(String[] args){
            Method m =new Method();
            m.test();
        }
        public void test(){
            final double pi=3.14;
            int r=6;
            class Circle implements Type{
                public double area(){
                    return pi*6*6;
                }
            }
            Circle c =new Circle();
            System.out.println("area="+c.area());
        }
    }
    interface Type{
        public double area();
    }

注意:局部内部类方法中想要使用局部变量,该变量必须声明为 final 类型;所以例子中未用 r 成员变量。

3.静态内部类

静态内部类就是修饰为 static 的内部类。声明为 static 的内部类,不需要内部类对象和外部类对象之间的联系,就是说,用户可以直接引用“外部类.内部类”。
静态内部类实例化如下:

外部类.内部类 对象 = new 外部类.内部类()

4.匿名内部类

匿名内部类是不能有名称的内,所以没办法引用。必须在创建时,作为 new 语句的一部分来声明,如下:

new <类或接口> <类的主体>

匿名内部类形式如下:

new 类或接口{
    //方法主体
}

示例:

    public class NiMing {
        public static void main(String[] args) {
            T t = new T(){
                @Override
                public void t() {
                    System.out.println("t...");
                }
            };
            t.t();
        }
    }
    interface T{
        public void t();
    }

匿名内内部类可以当作方法的返回值。

特别注意:

在使用匿名内部类时,要记住以下几个原则。
1.匿名内部类不能有构造方法。
2.匿名内部类不能定义任何静态成员,方法和类。
3.匿名内部类不能使用public,protected,private,static。
4.只能创建匿名内部类的一个实例。
5.一个匿名内部类一定是在 new 后面,用其隐含实现一个接口或实现一个类。
6.因匿名内部类为局部内部类,所以,局部内部类的所有限制都对其有效。
7.内部类只能访问外部类的静态变量或静态方法。
8.内部类当中的 this 指的是匿名内部类本身,如果使用外部类中的 this,则“外部类.this”。

你可能感兴趣的:(Java内部类(详细整理)