Java中的三种内部类

内部类

内部成员类:和成员方法并列,无static修饰
嵌入类:和成员方法并列,并且有static修饰
本地类:在成员方法中定义的类

实例如下:OuterClass是一个外部类,里面定义了三个内部类InnerClass、NestedClass、MethodClass分别对应上面三种内部类,还定义了一个不相关的类AnotherClass和一个public修饰的主类DemoClass,该文件名称为DemoClass.java。通过javac命令编译后,产生的各类如图所示,通过观察可知即使将类写在同一个java文件中,编译出的class文件也是独立命名的,只有内部类才会以$符号相连去命名。

哈哈哈

import cn.oracle.inner.OuterClass.InnerClass;
import cn.oracle.inner.OuterClass.NestedClass;

class OuterClass
{
    //内部成员类
    public class InnerClass
    {    
        public void InnerMethod()
        {
            System.out.println("innerMethod");
        }
    }
    //嵌套类
    public static class NestedClass
    {
        public void nestMethod()
        {
            System.out.println("nestMethod");
        }
        public static void snestMethod()
        {
            System.out.println("nestMethod");
        }
    }
    public void method()
    {
        class MethodClass
        {
            //本地类
            public void MethodMethod()
            {
                System.out.println("methodMethod");
            }
        }
        new MethodClass().MethodMethod();
    }
}
class AnotherClass
{
    public void anotherMethod()
    {
        System.out.println("anotherMethod");
    }
}
public class DemoClass
{
    //内部类对象声明的两种写法 外部类名.内部类名 obj和内部类名 obj
    public static void main(String[] args)
    {
        OuterClass outerobj = new OuterClass();
        //内部成员类对象创建的方法
        OuterClass.InnerClass e_innerobj;
        InnerClass innerobj;
        e_innerobj = outerobj.new InnerClass();
        innerobj = outerobj.new InnerClass();
        
        //嵌套类对象创建的方法
        OuterClass.NestedClass e_nestedobj;
        NestedClass nestedobj;
        e_nestedobj = new NestedClass();
        nestedobj = new NestedClass();
        e_nestedobj = new OuterClass.NestedClass();
        nestedobj = new OuterClass.NestedClass();
    }

非静态方法调用无疑是用对象去调用,所以只在下面说一下嵌套类中的静态方法的调用
如下所示,四种调用snestedMethod方法的方式都是正确的。
A :NestedClass nestedobj = new OuterClass.NestedClass(); nestedobj. snestedMethod();
B  : OuterClass. NestedClass  nestedobj = new OuterClass.NestedClass(); nestedobj. snestedMethod();
C :OuterClass. NestedClass. snestedMethod();
D : NestedClass. snestedMethod();

内部类的一点总结:
*三种内部类中只有嵌套类中可以定义静态方法
*本地类对象只能在其所定义的方法中创建
*内部成员类创建对象的方法:内部类对象 = 外部类对象.new 内部类()
*嵌套类创建对象的方法:内部类对象 = new 内部类()  或者 内部类对象 = new 外部类名称.内部类();
*嵌套类调用自己里面的静态方法有上述四种方式
*内部类导入到别的类中使用的时候引入的类路径写法 如 import cn.oracle.inner.OuterClass.InnerClass;import cn.oracle.inner.OuterClass.NestedClass;
*通过反射不能获取到本地类的class对象,通过反射的Class.forname()获取内部类的class对象,类路径应该写为Class clazz = Class.forName("cn.oracle.inner.OuterClass$InnerClass");

以上总结均为博主自己试验所得结果无法保证100%正确性,如有不同见解请在下面留言即可,共同学习进步。   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Meng Man

晚上加鸡腿,谢谢各位老板。

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

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

打赏作者

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

抵扣说明:

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

余额充值