java----内部类分类

1.成员内部类----成员方法

*******成员内部类不能存在任何static变量或方法,可以访问外部类的静态变量

成员内部类需要依附外部类new outter().new inner();

内部类可以使用private封装,表示私有内部类,该内部类只供外部类使用.

2.静态内部类----静态方法

a.静态内部类的创建不需要外部类,可以直接创建。

b.静态内部类不可以访问外部类的任何非static变量

******不能访问非静态变量,可以存在自己的成员变量。

static定义一个静态内部类

class Outer{ //外部类
    private static String msg="hello world";
   static class Inner{ //定义一个静态内部类
        public void print(){
            System.out.println(msg);
        }
    }
    public void fun(){//在外部类中定义一个方法,该方法负责产生内部类对象并调用print方法
        Inner in=new Inner();
        in.print();
    }
}
public class hehe{
    public static void main(String[]args){
        Outer out=new Outer();//外部类对象
        out.fun();//外部类方法
    }
}

3.方法内部类---成员内部类(没有静态变量)

1. 局部内类不允许使用访问权限修饰符 public private protected 均不允许。

2. 局部内部类对外(方法外)完全隐藏,除了创建这个类的方法可以访问它其他的地方是不允许访问的。

3. 局部内部类要想使用方法形参,该形参必须用final声明(JDK8形参变为隐式final声明).

class Outter {
    private int num;
    public void display(final int test) {//test最终变量
    class Inner { //不能加任何修饰
    private void fun() {
    num++;
    System.out.println(num);
    System.out.println(test);
    }
    }
    new Inner().fun();
    }
    }
    public class mytest {
    public static void main(String[] args) {
    Outter out = new Outter();
    out.display(20);
    }
}

4.匿名内部类

是方法内部类的特殊版本

1. 匿名内部类是没有访问修饰符的。

2. 匿名内部类必须继承一个抽象类或者实现一个接口

3. 匿名内部类中不能存在任何静态成员或方法

4. 匿名内部类是没有构造方法的,因为它没有类名。

5. 与局部内部相同匿名内部类也可以引用方法形参。此形参也必须声明为 final.

interface MyInterface {
    void test();
    }
    class Outter {
    private int num;
    public void display(int para) {
    // 匿名内部类,实现了MyInterface接口
    new MyInterface(){
    public void test() {
    System.out.println("匿名内部类"+para);
    }
    }.test();
    }
    }
    public class mytest{
    public static void main(String[] args) {
    Outter outter = new Outter();
    outter.display(20);
    }
}

内部类的特点:

1. 破坏了程序的结构

2. 方便进行私有属性的访问。(外部类也可以访问内部类的私有域)

3. 如果发现类名称上出现了".",应当立即想到内部类的概念。

猜你喜欢

转载自blog.csdn.net/weixin_42365095/article/details/83242182