Java基础7:内部类

一、什么是内部类

内部类:就是在一个类内部进行其他类结构的嵌套操作。

二、内部类的分类

在Java中内部类主要分为成员内部类类、方法内部类、匿名内部类、静态内部。

(1)成员内部类

public class Out {
    private String name;

    public void showName(){
        System.out.println("my name is : "+name);
    }

    public class In{
        public void sayHello(){
            System.out.println(name);
            Out.this.showName();
        }
    }
}

 我们的成员内部类可以直接访问外部类的成员字段和成员方法,因为它是关联着一个外部类实例的。

(2)方法内部类

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

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

3、局部内部类与成员内部类不同之处是他可以引用成员变量,但该成员必须声明为 final,并内部不允许修改该变量的值。

public class Out {
    private String name;

    public void sayHello(){
        class In{
            public void showName(){
                System.out.println("my name is : "+name);
            }
        }
        In in = new In();
        in.showName();
    }
}

 方法内部类的生命周期不超过包含它的方法的生命周期,也就是说,方法内部类只能在方法中使用。所以在声明的时候,任何的访问修饰符都是没有意义的,于是Java干脆不允许使用任何的访问修饰符修饰方法内部类。 

(3)匿名内部类

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

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

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

4、匿名内部类没有明面上的构造方法,编译器会自动生成一个引用外部类的构造方法。

5、与局部内部相同匿名内部类也可以引用局部变量。此变量也必须声明为 final。

//首先定义一个普通类
public class Out {
    private String name;

    private void sayHello(){
        System.out.println("my name is :" + name);
    }
}

//定义和使用一个匿名内部类
public static void main(String [] args){
    Out out = new Out(){
        @Override
        public void sayHello(){
            System.out.println("my name is cyy");
        }
        public void showName(){
            System.out.println("hello single");
        }
    };
    out.sayHello();
}

(4)静态内部类

1、静态内部类可以有静态成员

2、静态内部类可以访问外部类的静态变量,而不可访问外部类的非静态变量;

3、静态内部类的创建不依赖于外部

public class Out {
    private static String name;
    private int age;

    public static class In{
        private int age;
        public void sayHello(){
            
            System.out.println("my name is : "+name);
            //--编译报错---
            //System.out.println("my age is :"+ age);
        }
    }
}

三、内部类的创建

(1) 在外部类外部 创建非静态内部类
语法: 外部类.内部类 内部类对象 = new 外部类().new 内部类();
举例: Outer.Inner in = new Outer().new Inner();

(2)在外部类外部 创建静态内部类
语法: 外部类.内部类 内部类对象 = new 外部类.内部类();
举例: Outer.Inner in = new Outer.Inner();

(3)在外部类内部创建内部类语法
在外部类内部创建内部类,就像普通对象一样直接创建:Inner in = new Inner();

posted @ 2019-07-15 10:50  悦风旗下  阅读(247)  评论(0编辑  收藏  举报