package bilibili;
class Oouter {
class Inter {
Inter() {
System.out.println("这是内部类");
}
}
}
public class Outer{
public static void main(String[] args) {
Oouter oouter = new Oouter();
Oouter.Inter inter = oouter.new Inter();//这里最最重要
}
}
----------------------------------------------------------------------------- 内部类的概念:在一个类的内部再定义一个完整的类,内部类也会生成class文件。但是有$符号。
1.声明内部类的对象的方法是:
外部类名(点)内部类名(空格)内部类对象 = 外部类对象(点)new(空格)内部类名();
比如现在外部类名Outer,内部类名Inter,外部类对象outer,内部类对象inter,则:
Outer.Inter inter = outer.new Inter();
内部类可以调用外部类的私有属性,当然也可以调用外部私有方法,但是当内部类加上了static后就不能调用外部类的private属性了。
private int a(){
int a = 20;
return a;
}
class Inter {
public void print() {
System.out.println(a());
System.out.println("这是内部类");
}
}
2.局部内部类:在方法里面定义类; 3.匿名内部类:没有名字的类: 假设我们有一个类Apple,Apple里面有一个a方法,我们可以先不对Apple进行实例化,直接使用new Apple().a()来调用a方法. 匿名内部类一般用在接口或者父类当中。 匿名内部类必须在声明对象之后,然后在后面可以调用该匿名内部类的方法,该内部类是匿名的,然后要用声明的对象的名字。 匿名内部类必须继承父类或者实现一个接口。
4.静态内部类:不依赖外部类,可直接创建或通过类名访问,可声明静态成员。
特点:
1.在内部类中可以调用内部类的私有方法,但是调用外部类的私有方法用(外部类的对象).私有名字。
2.只有外部类可以是静态的,内部类不行。
3.内部类想要访问局部变量,需要局部变量是final修饰的(局部变量即方法里面定义的变量)
4.内部类也可以继承接口用implements