内部类

  • 内部类就是在一个类的内部在定义一个类。比如:A类中定义了一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类了

  • 编译之后外部类Outer.class,内部类Outer$Inner.class

  • 成员内部类(不能包含静态属性,但是能包含静态常量)

    public class Outer{
        private int id = 10;
        private int age = 10;
        
        public void out(){
            System.out.println("外部类方法");
        }
        
        //成员内部类
        public class Inner{
            private int age = 20; //和外部类属性重名,优先访问
            public void in(){
                System.out.println("内部类方法");
            }
            
            //可以直接获得外部类的私有属性和方法
            public void getId(){
                System.out.println(id);
            }
            public void getAge(){
                System.out.println(age); //20
                //若要访问外部类重名的属性,必须使用类名.this.属性名
                System.out.println(Outer.this.age); //10
            }
        }
    }
    
    public class Test{
        public static void main(String[] args){
            Outer outer = new Outer();
            //通过外部类来实例化内部类
            Outer.Inner inner = outer.new Inner();
            inner.in(); //内部类方法
            inner.getId(); //10
        }
    }
    
  • 静态内部类(和外部类相同)

    public class Outer{
        private int id = 10;
        public void out(){
            System.out.println("外部类方法");
        }
        
        //static修饰的静态内部类
        public static class Inner{
            public void in(){
                System.out.println("内部类方法");
            }
    
            public void getId(){
                //System.out.println(id); //静态内部类不能直接拿不到外部方法
                Outer outer = new Outer();
                System.out.println(outer.id);
            }
        }
    }
    
    public class Test{
        public static void main(String[] args){
            Outer.Inner inner = new Outer.Inner();
            inner.in(); //内部类方法
        }
    }
    
  • 局部内部类(作用范围仅限于当前方法,不能加任何修饰符)

    public class Outer{
        private int id = 10;
        
        public void method(){
            //定义局部变量
            String address = "广州";
            
            //局部内部类(不能包含静态变量,但是可以包含静态常量)
            class Inner{
                
                public void get(){
                    System.out.println(id); //可以直接访问外部类属性
                    System.out.println(address); //访问局部变量(jdk1.7要求变量必须是final常量,jdk1.8会自动添加final)
                }
            }
            
            //创建内部类对象
            Inner inner = new Inner();
            inner.get();
        }
    }
    
    public class Test{
        public static void main(String[] args){
            Outer outer = new Outer();
            outer.method(); 
        }
    }
    
  • 匿名内部类(没有类名的局部内部类)

    public class Test{
        public static void main(String[] args){
            //没有名字初始化类,不用将实例保存到变量中
            new Apple().eat(); //吃苹果
            
            UserService userservice = new UserService(){
                @Override
                public void hello(){
                    System.out.println("Hello");
                }
            };
            userservice.hello(); //Hello
        }
    }
    
    class Apple{
        public void eat(){
            System.out.println("吃苹果");
        }
    }
    
    interface UserService{
        void hello();
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Remote_Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值