Java学习历程之----提升篇(十)

世界地球日,奏响低碳生活进行曲,以蓝天为乐谱,以绿树为音符,以碧水为琴弦弹奏出环保最强音,为地球母亲祈祷平安吃五谷杂粮,穿天然布衣,住节能住宅,行无车之旅,用厉行节俭。让我们怀着敬畏感恩之心,向地球母亲贺寿。

                                                       

科普

知识

前言

    上周我们说到Java内部类可以细分为实例内部类,静态内部类和局部内部类,前面我们对实例内部类进行了简单的介绍,本周我们来学习静态内部类和局部内部类的内容。

一、静态内部类

    静态内部类是指使用static修饰的内部类。

1.1 静态内部类的示例代码如下:

public class Outer {
    static class Inner {
        // 静态内部类
    }
}

1.2 静态内部类的特点:

    1)在创建静态内部类的实例时,不需要创建外部类的实例。

    2)静态内部类中可以定义静态成员和实例成员。

    3)静态内部类可以直接访问外部类的静态成员,如果要访问外部类的实例成员,则需要通过外部类的实例去访问。

二、静态内部类实战

下面我们通过具体代码来说明静态内部类的三个特点。

package code.tisheng10;
public class Static_inner_class {   //声明外部类
    int outer_x = 100;              //实例变量
    static class Inner {            //声明内部类
        int inner_x = 3;                  // 实例变量x
        static int inner_y = 9;           // 静态变量y
        //内部类访问外部类的实例变量需要通过外部类的实例去访问(特点3)
        Static_inner_class a = new Static_inner_class();
        int inner_x2 = a.outer_x;
    }
}
class OtherClass {
    Static_inner_class.Inner inner_class = new Static_inner_class.Inner();//实例化内部类,不需要创建外部类的实例(特点1)
    //外部类以外的其他类需要通过完整的类名访问静态内部类中的静态成员;
    // 如果要访问静态内部类中的实例成员,则需要通过静态内部类的实例。(特点2)
    int a2 = inner_class.inner_x;                 // 访问实例成员
    int b2 = Static_inner_class.Inner.inner_y;    // 访问静态成员
}

三、局部内部类

局部内部类是指在一个方法中定义的内部类。                                         

3.1 局部内部类的示例代码如下:

public class Test {
    public void method() {
        class Inner {
            // 局部内部类
        }
    }
}

3.1 局部内部类的特点:

    1)局部内部类与局部变量一样,不能使用访问控制修饰符(public、private 和 protected)和 static 修饰符修饰。

    2)局部内部类只在当前方法中有效。

    3)局部内部类中不能定义 static 成员。

    4)局部内部类中还可以包含内部类,但是这些内部类也不能使用访问控制修饰符(public、private 和 protected)和 static 修饰符修饰。

    5)在局部内部类中可以访问外部类的所有成员。

    6)在局部内部类中只可以访问当前方法中 final 类型的参数与变量。如果方法中的成员与外部类中的成员同名,则可以使用 <OuterClassName>.this.<MemberName> 的形式访问外部类中的成员。

四、局部内部类实战

下面通过具体代码来说明局部内部类的特点。

package code.tisheng10;
public class Part_class {       //外部类
    int a = 123;
    int d = 1;
    public void method() {      //声明method方法
        int b = 0;
        final int c = 789;
        final int d = 100;
        class Inner {           //内部类
            int a2 = a;         // 访问外部类中的成员
            // int b2 = b;      // 编译出错(参考特点6,只可访问final型)
            int c2 = c;         // 访问方法中的成员
            int d2 = d;         // 访问方法中的成员
            int d3 = Part_class.this.d; //访问外部类中的成员(添加外部类名以区分)
        }
        Inner i = new Inner();   //实例化内部类
        System.out.println(i.d2);    // 输出100
        System.out.println(i.d3);    // 输出1
    }
    public static void main(String[] args) {
        Part_class t = new Part_class();
        t.method();
    }
}

 运行结果及截图:

小编有话说:

    对于内部类有了一个大致的了解,后面小编还会和大家一起如何使用内部类实现多重继承,大家还记得前面我们学过的实现多重继承的机制吗?不记得的话建议点击这里--->Java学习历程之----提升篇(七),不积跬步无以至千里,大家继续加油吧~

编辑:玥怡居士|审核:世外居士

往期精彩回顾

Java学习历程之----提升篇(九)

Java学习历程之----提升篇(八)

Java学习历程之----提升篇(七)

微信号:IT进阶之旅

我就知道你在看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值