java基础-内部类

一、概述

内部类:将类置于其他类内部

  • 成员内部类
    定义在一个类之中
//将类放在其他类内部
public class Body {

    //定义成员内部类
    public class Heart{
        //内部类方法
        public void beat(){
            System.out.println("beat");
        }
    }
}

访问内部类数据与方法

  • 1.通过外部类方法访问
public class Body {

    //定义成员内部类
    public class Heart{
        //内部类方法
        public void beat(){
            System.out.println("beat");
        }
    }
    
    public void methodBody1(){
        Heart heart = new Heart();  //实例对象访问
        heart.beat();
        //或
        new Heart().beat();  //匿名对象访问
    }
}
        //创建外部类对象
        Body body = new Body();
        
        //通过外部类对象的方法访问成员内部类
        body.methodBody1();
  • 2.通过创建成员内部类对象访问(.new
        //创建内部类对象
        Body.Heart heart = new Body().new Heart();
        //通过内部类对象访问方法
        heart.beat();
  • 局部内部类

    • 1.方法内部类

      定义在一个类的方法当中

public class Body {
    public void methodBody(){
        final int num = 10;  //局部内部类如果要访问所在方法的局部变量,那个这个变量为final

        //局部内部类 (没有任何修饰符)
        class Habit{
            public void showHabit(){
                System.out.println("num");
                System.out.println("habit");
            }
        }
        //局部内部类 只能通过所在方法进行调用
        Habit habit = new Habit();
        habit.showHabit();
        //或
        new Habit().showHabit;
    }
}
  • 2 匿名内部类
接口名称 对象名 = new 接口名称(){

       //覆盖重写所有抽象方法
}; //注意分号,说明整体为一个语句
public class Demo02InnerClass {
    public static void main(String[] args) {
    
        //定义匿名内部类
        //MyInterface是一个接口
        MyInterface a = new MyInterface() {
            @Override
            public void method() {
                System.out.println("匿名内部类");
            }
        }; //注意此处的分号;说明这整体为一个语句。

        //访问匿名内部类方法
        a.method();
    }
}

注意事项:

  • 成员内部类变量重名情况(.this
public class Outer {
    int num = 10;
    public class Inner{
        int num = 20;
        public void showNum(){
            int num = 30;
            System.out.println(num);   //就近原则 输出30
            System.out.println(this.num);  //this 访问本类成员 输出 20
            System.out.println(Outer.this.num);  //输出10
        }
    }
}

  • 2.类的权限修饰符:
    • 外部类:public (default)
    • 成员内部类:public protected (default) private
    • 方法内部类:什么都不写
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值