内部类
-
内部类就是在一个类的内部再定义一个类,比如在A类中有定义了一个B类,那么B类相对于A类来说就是内部类,而A类相对于B类就是外部类
-
成员内部类
-
静态内部类
-
局部内部类
-
匿名内部类
内部类访问外部类的字段:外部类类名.this.字段
内部类访问外部类的方法:外部类类名.this.方法
内部类访问内部类字段:this.字段
内部类访问内部类方法:this.方法
-
成员内部类
package OOP.InnerClass;
//外部类
public class Outer {
private int id = 101;
public void out(){
System.out.println("这是外部类的方法");
}
//成员内部类
public class Inner{
public void in(){
System.out.println("这是内部类的方法");
}
//内部类可以访问外部类的一些私有属性和方法
public void get(){
//可以访问外部类的私有属性
System.out.println(id);
//可以访问外部类的方法
Outer outer = new Outer();
outer.out();
}
}
}
package OOP.InnerClass;
public class Application {
public static void main(String[] args) {
//外部类实例化
Outer outer = new Outer();
//通过外部类的实例来实例化内部类
Outer.Inner inner = outer.new Inner();
inner.in();
//内部类可以直接访问外部类的私有属性和方法
inner.get();
}
}
//结果
D:\JDK\bin\java.exe "-javaagent:D:\IDEA\IntelliJ IDEA 2022.2.3\lib\idea_rt.jar=26331:D:\IDEA\IntelliJ IDEA 2022.2.3\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\eclipse\work\Demo1\out\production\untitled1 OOP.InnerClass.Application
这是内部类的方法
101
这是外部类的方法
进程已结束,退出代码0
-
静态内部类
-
局部内部类(写在方法里面的类)
package OOP.InnerClass;
//外部类
public class Outer {
//方法
public void A(){
//局部内部类
class Inner{
//里面也可以写一些方法,但不建议这样写
public void fin(){
}
}
}
}
-
匿名内部类
package OOP;
public class test {
public static void main(String[] args) {
//正常情况下的实例化对象,这个对象的名字就是apple
Apple apple = new Apple();
//何为匿名:就是没有名字初始化类,不用把实例保存在变量中,此时我们依然可以调用eat方法
new Apple().eat();
//new接口
UserService userService = new UserService() {
@Override
public void Hello() {
System.out.println("Hello");
}
};
}
}
class Apple{
public void eat(){
System.out.println("XDDA");
}
}
//定义一个接口
interface UserService{
void Hello();
}