【学习笔记】内部类

内部类

内部类就是在一个类的内部在定义一个类

1.成员内部类

package com.oop.demo10;
​
public class Outer {
    private int id;
    public void out(){
        System.out.println("这是外部类的方法");
    }
    class inner{
        public  void in(){
            System.out.println("这是内部类的方法");
        }
    }
}

其中,inner 就是内部类

通过外部类来实例化内部类,并且内部类可以直接访问外部类的私有变量

package com.oop;
​
import com.oop.demo10.Outer;
​
public class Application {
    public static void main(String[] args) {
        Outer outer = new Outer();
​
        //通过外部类来实例化内部类
        Outer.Inner inner = outer.new Inner();
        inner.getId();
    }
}
package com.oop.demo10;
​
public class Outer {
    private int id = 10;
    public void out(){
        System.out.println("这是外部类的方法");
    }
    public class Inner{
        public  void in(){
            System.out.println("这是内部类的方法");
        }
        public void getId(){
            System.out.println(id);
        }
    }
}

image-20220718174548614

 

2.静态内部类

package com.oop.demo10;
​
public class Outer {
    private int id = 10;
    public void out(){
        System.out.println("这是外部类的方法");
    }
    public static class Inner{
        public  void in(){
            System.out.println("这是内部类的方法");
        }
        public void getId(){
            System.out.println(id); //会报错
        }
    }
}

变成静态内部类后,id就拿不到了,原因是该静态内部类在类创建时先被实例化,还没有属性id

 

3.局部内部类

在方法中创建的类

package com.oop.demo10;
​
public class Outer {
    public void method(){
        class Inner{
            
        }
    }
}

 

4.匿名内部类

没有名字去初始化类

package com.oop.demo10;
​
public class Test {
    public static void main(String[] args) {
        new Apple().eat();
    }
}
class Apple{
    public  void  eat(){
        System.out.println("1");
    }
}

不用将实例保存在变量中

 

接口的匿名内部类

package com.oop.demo10;
​
public class Test {
    public static void main(String[] args) {
        new UserService(){
​
            @Override
            public void hello() {
                
            }
        };
    }
}
interface UserService{
    void hello();
}
 
posted @ 2022-07-18 18:00  GrowthRoad  阅读(17)  评论(0编辑  收藏  举报