内部类、成员内部类、静态内部类、方法内部类

一、内部类

(一)什么是内部类?

可以在类中再定义类,就叫做内部类,这个内部类所在的类,就叫做外部类。

(二)内部类作用

1.内部类提供更好的封装,把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。

2.内部类成员可以直接访问外部类的私有数据,因为内部类被当成外部类的成员。然而外部类不能访问内部类的实现细节(如内部类的成员变量)。

二、成员内部类

1.什么是成员内部类

在一个类中可以定义成员变量成员方法,还可以定义类就叫做成员内部类。成员内部类可以访问外部类的**所有成员**。

2.外部类访问内部类,首先创建外部类对象去创建内部类对象,创建内部类对象的语法格式

外部类名.内部类名 变量名=new 外部类名().new 内部类名();
Outer.  Inner1  oi  =new  Outer(). new Inner1();

3.怎么定义成员内部类案例

例如:

//外部类Outer
class Outer{
    private int a=20;
    //内部类Inner1
    class Inner1 {
        private int b =10;
        public void inShow(){
            System.out.println("Outer...a="+a);
            System.out.println("Inner...b="+b);
        }
    }
    public void testInner(){
        Inner in=new Inner();
        in.inShow();
}

Outer是一个外部类,在这个类中定义了Inner1成员内部类和testInner()成员方法,在Inner1内部类中有一个inShow()方法是成员内部类去访问外部类的成员变量a,在testInner()方法中创建内部类Inner1实例对象,调用InShow()方法。

如果想调用inShow()方法,有两种方法:

⑴首先创建外部类对象new Outer()再去创建内部类对象new Inner(),创建内部类对象代码如下:

Outer.Inner1 oi  =new Outer().new Inner1();;//创建内部类
oi.inShow();//调用test()方法

⑵在外部类中定义一个testInner()方法,在testInner()方法中创建内部类Inner1实例对象,调用InShow()方法。然后用外部类对象调用testInner()方法。

Outer out=new Outer();//创建外部类对象
out.testInner1();//调用testInner1()方法

输出的结果是:

  Outer...a=20  
  Inner...b=10

三、静态内部类

1.什么是静态内部类

内部类如果使用static关键字来声明,这个内部类叫做静态内部类。它是可以不创建外部类对象被实例化。

//外部类Outer
class Outer {
    private int a = 20;
    //静态内部类Inner2
    static class Inner2 {
         int d = 40;
            //成员方法
         public void show() {
            System.out.println("static Inner...d=" + d);
         }
			//静态方法
         public static void show2() {
            // System.out.println(b);//b是外部类的成员变量,所以静态内部类中无法访问
            System.out.println("static Inner...static show2");
         }
     }
 }

2.调用静态内部类非静态方法

Outer.Inner2 soi=new Outer.Inner2();
soi.show();

测试结果:

static Inner...d=40

3.调用静态内部类静态方法

Outer.Inner2.show2();

测试结果:

static Inner...static show2

从上面的代码中,内部类Inner2使用static关键字来声明,表示一个静态内部类。在静态内部类中只可以访问外部类的静态变量。如果访问外部类的成员变量必须通过外部类的实例去访问,静态内部不会有外部类的引用!

四、方法内部类

1.什么是方法内部类

内部类定义在外部类的方法中,方法内部类只可以在这个方法的内部可见,也就是只可以在这个方法内使用。

2.方法内部类不可以在外部类方法以外去使用,方法内部类不能使用访问控制符和static修饰符。

3.怎么使用方法内部类

例如:

class Outer {
    //定义类的成员变量
    private String name = "李华";
    private int score = 88;

    public void test() {
    //在方法中定义内部类
        class Inner {
            void show() {
                //访问外部类的成员变量
                System.out.println("姓名:" + name + "  " + "英语成绩:" + score + "分!");
            }
        }
        Inner in = new Inner();//创建内部类对象
        in.show();//调用内部类方法
    }
}

public class Test {
    public static void main(String[] args) {
        Outer out = new Outer();//创建外部类对象
        out.test();//调用test()方法
    }
}

输出的结果是:

姓名:李华  英语成绩:88!

从上面代码中,在Outer类的test()方法中定义了一个内部类Inner,因为内部类Inner是方法内部类,程序在运行只能在方法创建类的实例对象然后调用show()方法,方法内部类是可以访问外部类的成员变量。

五、总结

本文主要介绍了内部类的成员内部类、静态内部类、方法内部类。

成员内部类是在一个类中可以定义成员变量、成员方法外,还可以定义类。通过一个怎么定义成员内部类案例帮助理解这个用法。

静态内部类是使用static关键字来声明,通过一个如何使用静态内部类案例理解这个用法。

方法内部类是内部类定义在外部类的方法中,方法内部类只可以在这个方法的内部可见,也就是只可以在这个方法内使用。

希望大家通过本文的学习,对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁꫞南鸢꫞꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值