学习笔记---内部类

内部类

1. 成员内部类(普通内部类)

  • 最常见的内部类之一,其定义也很简单,在一个类里面作为类的一个字段直接定义
public class Outer {
    public class inner{
        
    }
}
  • 成员内部类可以访问外部类所有的属性和方法。但是外部类要访问成员内部类的属性和方法,必须要先实例化成员内部类。
  • 注意点:成员内部类里面不能包含静态的属性和方法
package oop.Demo09;

public class Outer {
    public void test1(){

    }

    private void test2(){

    }

    public static void test3(){

    }

    public class inner{
        public void test(){
            test1();
            test2();
            test3();
        }
    }
}
  • 实例化成员内部类的代码
package oop.Demo09;

public class Outer {
    public int id = 10;
    public void run1(){
        System.out.println("这是外部类的方法!");
    }

    public class inner{
        public void run2(){
            System.out.println("这是内部类的方法!");
        }

        public void GetId(){
            System.out.println("外部类中的id:"+id);
        }

        //run1();   报错
        public void run(){
            Outer.this.run1();
        }
    }
}
package oop.Demo09;

public class Application {
    public static void main(String[] args) {

        Outer outer = new Outer();
        outer.run1();   //这是外部类的方法!

        Outer.inner inner = outer.new inner();//实例化成员内部类

        //调用成员内部类的方法时直接用inner
        inner.run2();   //这是内部类的方法!
        inner.GetId();  //外部类中的id:10
        inner.run();    //这是外部类的方法!
    }
}

2. 局部内部类

  • 定义在代码块内的一个内部类。在方法里面定义一个内部类,就是局部内部类。局部内部类的使用范围仅在其所在的代码块中
  • 不能被public ,protected,private以及static修饰,能被final修饰
  • 局部内部类可以访问外部类对象的所有属性和方法,而外部类却不能访问局部内部类中的属性和方法,因为局部内部类的定义只在其所在的代码块中有效,一旦出了这个区域,那么其定义就失效了

代码示例:

package oop.Demo09;

public class Student {
    public static void study(){

        System.out.println("学生正在学习");
        //局部内部类
        final class StudentSay{
            public void say() {
                System.out.println("学生正在说话");
            }
        }
    }
}
package oop.Demo09;

public class Application {
    public static void main(String[] args) {

        Student student = new Student();
        student.study();    //学生正在学习
    }
}

3. 静态内部类

  • 在成员内部类多加了一个 static 关键字。静态内部类只能访问外部类的静态成员变量和方法,包括private属性和方法
package oop.Demo09;

public class Outer {
    public static int id = 10;
    public static void run1(){
        System.out.println("这是外部类的方法!");
    }

    static class Inner{
        public void run2(){
            System.out.println("这是内部类的方法!");
        }

        public void GetId(){
            System.out.println("外部类中的id:"+id);
        }

        //run1();   报错
        public void run(){
            Outer.run1();
        }
    }
}
package oop.Demo09;

public class Application {
    public static void main(String[] args) {

        Outer outer = new Outer();
        outer.run1();   //这是外部类的方法!

        //静态内部类实例化
        Outer.Inner inner = new Outer.Inner();

        //调用成员内部类的方法时直接用inner
        inner.run2();   //这是内部类的方法!
        inner.GetId();  //外部类中的id:10
        inner.run();    //这是外部类的方法!
    }
}

4. 匿名内部类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值