【Example5】介绍内部类的使用场景和理解

内部类

  • 把一个类定义在某个类中的,这个类就被称为内部类,内置类,嵌套类
  • 访问特点
    • 内部类可以直接访问外部类中的成员,因为内部类持有外部类的引用;格式:外部类ming.this
    • 外部类要想访问内部类的成员,必须创建对象访问
  • 内部类的访问格式
    • 当内部类定义在外部类的成员位置,而且非私有,则可以在其他外部类中直接建立内部类对象
      • 格式:外部类名.内部类名  变量名 = new 外部类对象.内部类对象
      • 例子:Outer.Inner in = new Outer().new Inner();
    • 当内部类在外部类成员位置,且被static修饰时
      • 外部其他类可直接访问静态内部类的非静态成员
        • 格式:new 外部类名.内部类名().内部类成员
        • 例子:new Outer.Inner().function();
      • 外部其他类可直接访问静态内部类的静态成员
        • 格式:new 外部类名.内部类名.内部类成员
        • 例子:new Outer.Inner.function();
  • 内部类的使用场景
    • 有A类和B类,A类想直接访问B类的成员,B类访问A类成员的时候,需要创建A类对象进行访问,这个时候,就可以把A类定义为B类的内部类
  • 内部类的位置
    • 成员位置
      • 可以被private修饰
      • 可以被static修饰。(它访问的外部类的成员也必须是静态的) 
    • 局部位置
      • 可以直接访问外部类中的成员,因为还持有外部类的持用
      • 可以直接访问局部成员,但是局部成员要用final修饰
    • 局部内部类不能用private和static修饰
  • package com.tingle.j2se.basic;
    
    /**
     * Created on 2020/4/22 22:13
     *
     * @author Tingle
     */
    public class Example5 {
        public static void main(String[] args) {
            System.out.println("******start******");
            Outer outer = new Outer();
            outer.getSongNum();
            Outer.Inner inner = new Outer().new Inner();
            inner.getStoryNum();
            inner.getAllNum();
            System.out.println("******end******");
        }
    }
    
    class Outer{
    
        private int num = 10;
        public void getSongNum(){
            System.out.println("有歌曲" + num + "首");
        }
    
        class Inner{
    
            private int num = 20;
            public void getStoryNum(){
                System.out.println("有故事" + num + "个");
            }
            public void getAllNum(){
                System.out.println("共计数量:" + (Outer.this.num + this.num));
            }
        }
    }

     

运行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值