内部类 (Java)

内部类

  1. 成员内部类: 成员内部类可以访问外部类的所有成员变量和方法(无论静态、非静态、私有、非私有),自身没有静态成员。

    在外部类中如果要访问成员内部类的成员,必须先创建 一个成员内部类的对象,再通过指向这个对象的引用来访问。

  2. 静态内部类: 如果用 static 将内部类静态化,那么内部类就只能访问外部类的静态成员变量,不能直接访问外部类的实例变量、实例方法,只有通过对象引用才能访问。

  3. 局部内部类: 内部类移到了外部类的方法中,然后在外部类的方法中再生成一个内部类对象去 调用内部类方法。(像局部变量一样,不能被public, protected, private和static修饰 )

  4. 匿名内部类: 类的定义与类的创建,放到与一起完成,或者说在定义类的同时就创建一个类 , 以这种方法定义的没有名字的类成为匿名内部类。

    匿名内部类只能选择继承一个类或着实现一个接口,不需要 extends 和 implements 关键字。

    此处演示了成员内部类静态内部类

    public class Demo001Test {
        public static void main(String[] args) {
           // Outter1.Inner1 inner1 = new Outter1().new Inner1();  // 成员内部类的生成   不过由于private修饰,其他类使用不了   (成员内部类)
            Outter1.Inner2 inner2 = new Outter1.Inner2();      // 静态内部类的生成  (静态内部类)
    
        }
    }
    
    class Outter1{
        private String name = "aaaa";
    
        public void test1(){
            Inner1 in = new Inner1();
            in.test();
        }
        //  成员内部类    私有化后,只能由外部类(Outter1)进行操作
        private class Inner1 {
            private void test(){
                System.out.println(name);
            }
    
        }
        // 静态内部类
        static class Inner2{
    
        }
    
    }
    

    此处演示局部内部类

    class Outter2{
    
        public void test(){
            int a = 10;  // 此处的a默认被final修饰
            class Inner{   // 局部内部类
                void test(){
                    System.out.println(a);
                }
            }
            Inner inner = new Inner();
    //    inner.test();
        }
    
    }
    
    

    此处演示匿名内部类

    public class Demo003Test {
        public static void main(String[] args) {
        // String b = new String();
            // 匿名内部类
            A a = new A(){
                @Override
                public void test1() {
                    System.out.println("你好");
                }
    
                @Override
                public void test2() {
                    System.out.println("你也好");
                }
            };
            a.test1();
            a.test2();
        }
    }
    
    // 定义一个Object 的子类对象
    interface A{
        void test1();  // 你好         我好
        void test2();  // 你也好       我也好
    }
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值