ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Java学习23--内部类

2026/9/19 13:51:19 拓冰建站 浏览量
Java学习23--内部类

内部类

内部类就是在一个class里面定义另一个class,比如在A class 中定义一个 B class,那么B class相对于A class来说就称为内部类,而A类相对于B类就是外部类了。
1.成员内部类
2.静态内部类
3.局部内部类
4.匿名内部类

知识补充:

IDEA新建一个new object的快捷键

alt+回车两次

举例想要写语句 method1 x= new method1();

那么先手写new 类名()比如
new method1()

然后在这一行用ALT+回车两次
就快速出来method1 x= new method1();语句了

举例 生成一个Outer class文件,在其中创建private int my_id,同时构建my_out method和Inner class(内部class)
然后在Inner class内部类里层在构建一个my_in method和getID method 其中getID method可以输出private int my_id

在主调用程序application中 把所有刚刚建立的method全部输出一遍。


package oop.Demo10;public class Outer {private int my_id=8;public void my_out(){System.out.println("这是外部类的方法");}public class Inner{public void my_in(){System.out.println("这是内部的方法");}//getID获得外部类的私有属性public void getID(){System.out.println(my_id);}}
}

package oop;
import oop.Demo10.Outer;
public class Application {public static void main(String[] args) {Outer x = new Outer();x.my_out();// 利用生成的object去生成new inner object// 先写x.new Inner();// 然后用快捷键alt+enter(twice)生成下面的yOuter.Inner y = x.new Inner();y.my_in(); //调用my_in methody.getID(); //获得外部类}}

运行结果

这是外部类的方法
这是内部的方法
8

思考 当Inner class标记为static时,为什么会有报错?

package oop.Demo10;public class Outer {private int my_id=8;public void my_out(){System.out.println("这是外部类的方法");}public static class Inner{public void my_in(){System.out.println("这是内部的方法");}//getID获得外部类的私有属性public void getID(){System.out.println(my_id);//注意 这里的my_id报错了,因为static部分需要先加载,而此时自定义的my_id系统还不识别,所以报错}}
}

思考 一个java class文件可以含有多个class块,可以同时有多个标记为public的class块吗?答案:只能有一个 public class,其他都是一般的class块,否则报错

package oop.Demo10;import org.w3c.dom.ls.LSOutput;public class Outer {private int my_id=8;public void my_out(){System.out.println("这是外部类的方法");}public class Inner{public void my_in(){System.out.println("这是内部的方法");}//getID获得外部类的私有属性public void getID(){System.out.println(my_id);}}
}public class A{//这里报错了,删掉public就正确了int a =12;
}

思考:
以前讲过interface本身不能用来新建new object,因为它本体没有权限构造method。有没有特例可以new interface class类型的object?

有。当interface class结构块和main结构块在同一个java文件内的时候,看下面的例子。

//class里面建interface,
//新建一个object 由它去完成interface里提到的methodpackage oop.Demo10;public class Test {public static void main(String[] args) {Apple x = new Apple(); //这句的x是具名实例object//下面是匿名实例,就是object没有起名字直接按照class结构初始化,// 这里new Apple()没有名字,也没有生成object叫做applenew Apple().eat();//以前讲过interface本身不能用来新建new object,因为它本体没有权限构造method//这是个特例:interface本身写在了同一个class结构里面,所以这是一个特殊用法//使用UserService当作一个class类型,定义一个UserService class object named y,并在其中完成了hello method//UserService y= new UserService(){@Overridepublic void hello() {System.out.println("output hello");}};y.hello();}
}
class Apple {public void eat(){System.out.println("eat apple");}
}//建立了一个接口叫做UserService,里面的hello menthod需要后来对接的class去实现
interface UserService{void hello();}

输出结果

eat apple
output hello