Java中的成员内部类、静态内部类和方法内部类



成员内部类

  • 成员内部类创建对象必须使用外部类对象来创建内部类对象,而不能直接new内部类构造方法的方式创建;
//普通成员内部类创建对象,需通过外部类对象进行创建
demo01 de1 = new demo01();
DemoChild2 dc2 = de1.new DemoChild2();
  • 外部类对象不能直接使用内部类的属性和方法,可先创建内部类对象并通过内部类对象访问;

  • 当外部类与内部类有相同的变量或者方法,内部类对象默认访问自己的变量和方法,若要访问外部类的对象和方法,需以外部类名.this.变量或方法的方式访问。

//普通成员类调用外部类的成员变量和调用内部类的成员变量
System.out.println(demo01.this.age);
System.out.println(age);


静态内部类

静态内部类是 static 修饰的内部类,这种内部类的特点是:

1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问

//静态内部类调用外部类和内部类的普通成员变量
System.out.println(new demo01().age);
System.out.println(age);

2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

//静态内部类调用外部类和内部类的静态成员变量
System.out.println(demo01.name);
System.out.println(name);

3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

 DemoChild dc1 = new DemoChild();//静态内部类创建对象


方法内部类

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

//方法内部类
private void Show()
{
    String name = "aaa";
    int age = 25;
    class DemoChild3{
       // private String name = "aaa";
        //private int age = 25;
        private void print()
        {
            System.out.println(name);
            System.out.println(age);
        }
    }
    DemoChild3 dc3 = new DemoChild3();
    dc3.print();
}


完整程序

package com.practice;

public class demo01 {
    private static String name="Tom";
    private int age = 21;

    //静态内部类
    public static class DemoChild{
        static String name="Lucy";
        int age = 19;
        void Print()
        {
            //静态内部类调用外部类和内部类的静态成员变量
            System.out.println(demo01.name);
            System.out.println(name);
            //静态内部类调用外部类和内部类的普通成员变量
            System.out.println(new demo01().age);
            System.out.println(age);
        }
    }

    //成员内部类
    public class DemoChild2{
        int age = 20;
        void Print()
        {
            //普通成员类调用外部类的成员变量和调用内部类的成员变量
            System.out.println(demo01.this.age);
            System.out.println(age);
        }
    }

    //方法内部类
    private void Show()
    {
        String name = "Anmi";
        int age = 25;
        class DemoChild3{
           // private String name = "aaa";
            //private int age = 25;
            private void print()
            {
                System.out.println(name);
                System.out.println(age);
            }
        }
        DemoChild3 dc3 = new DemoChild3();
        dc3.print();
    }

    public static void main(String []args)
    {
        DemoChild dc1 = new DemoChild();//静态内部类创建对象

        //普通成员内部类创建对象,需通过外部类对象进行创建
        demo01 de1 = new demo01();
        DemoChild2 dc2 = de1.new DemoChild2();

        dc1.Print();
        dc2.Print();
        de1.Show();
    }
}

运行结果:
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值