大家好,今天来分享一下Java内部类,所谓内部类就是在一个类的内部再定义一个类,比如,A类当中定义一个B类,这样的话,B类相对于A类而言,就是内部类,而A类相对于B类来说就是外部类
拿A 与B 来举例
class A { // 外部类
// ...
class B { // 嵌套类,或称为内部类
// ...
}
}
// 这是代码实例
Java内部类的语法格式:
class OuterClass { // 外部类
// ...
class NestedClass { // 嵌套类,或称为内部类
// ... 这个其实和上面那个没有区别,只是它的两个类名拥有见名知意
}
}
静态内部类可以使用 static 关键字定义,静态内部类我们不需要创建外部类来访问,可以直接访问它:
它包含了
1.成员内部类
2.静态内部类
3.局部内部类
4.匿名内部类
上代码实例
创建Outer类
package Deno011;
public class Outer {
private int id;
public void out(){
System.out.println("这是外部类的方法");
}
public class Inner {
public void in(){
System.out.println("这是内部类的方法");
}
}
}
我们再写一个测试类
package Deno011;
public class Application {
public static void main(String[] args) {
Outer outer =new Outer();
//通过这个外部类实例化内部类
Outer.Inner inner=outer.new Inner();
inner.in();
}
}
看运行结果:
1.在下面的代码块当中,写一个方法
2.我们 指定的属性私有化
3.之后在测试类当中进行调用。
package Deno011;
public class Outer {
private int id=10; //将属性私有化,赋值为10
public void out(){
System.out.println("这是外部类的方法");
}
class Inner {
public void in(){
System.out.println("这是内部类的方法");
}
public void getID(){ //获取外部类的私有属性
(还有私有的方法也是可以的)
System.out.println(id);
}
}
}
在测试类当中调用获取来的私有化属性数据
package Deno011;
public class Application {
public static void main(String[] args) {
Outer outer =new Outer();
//通过这个外部类实例化内部类
Outer.Inner inner=outer.new Inner();
inner.in();
inner.getID(); //调用
}
}
package Deno011;
public class Outer {
public void method(){
class Inner{ //局部内部类
public void in() {
}
}
}
}
测试类改成这样
package Deno011;
public class Application {
public static void main(String[] args) {
Outer outer =new Outer();
//通过这个外部类实例化内部类
}
}
下面是匿名内部类package Deno011;
public class Test {
public static void main(String[] args) {
//没有名字,初始化类,不用将实例保存到变量当中
//匿名内部类
new Apple().eat();
new UserService(){
@Override
public void hello() {
}
};
}
}
class Apple{
public void eat(){
System.out.println(1); //输出
}
}
interface UserService { //定义接口
void hello(); //写方法
}
输出结果
注意: 这个输出结果并不重要
重点 在于这段代码当中,接口的定义和应用以及内部类的结构
注意:在一个java程序当中,可以有很多个class类,但是只可以有一个public class
好了,关于Java内部类就到这里了,谢谢大家



