JAVA面向对象基础--N种内部类

一、成员内部类

//外部类  Outer(外部)
public class Outer {
    //私有属性
    private int id = 10;
    //方法
    public void out(){
        System.out.println("输出外部类的方法!");
    }

    //定义内部类
    public  class Inter{
        public  void in(){
            System.out.println("输出内部类的方法!");
        }

        //获取外部类的私有属性id
        public void getID(){
            System.out.println(id);
        }
    }
}
public class Application {
    public static void main(String[] args) {
        //实例化外部类
        Outer outer = new Outer();
        outer.out();//调用外部类的方法
        //实例化内部类
        //通过外部类来实例化内部类
        Outer.Inter inter = outer.new Inter();
        inter.in();//调用内部类的方法

        inter.getID();//获取外部类的私有属性
    }
}

运行效果图如下:

注意:如果内部类是静态类,则无法获取外部类的属性

  • 原因:静态类会先实例化,比id属性加载要早
//定义内部类
public static class Inter{
   public void in(){
      System.out.println("输出内部类的方法!");
   }

//获取外部类的私有属性id
    public void getID(){
       System.out.println(id);//报错!!!!
    }
}
  • 解决方法:把id也设置为静态
private static int id = 10;

二、局部内部类

public class Part {
    public void method(){
        //局部内部类
        class Inter{
            //方法
            public void test(){
                
            }
        }
    }
}

三、匿名内部类

public class Anonymity {
    //匿名内部类
    public static void main(String[] args) {
        //没有名字的初始化类,不用将实例保存到变量中
        new Inter().test();
    }
}
//类
class Inter{
    public void test(){
        System.out.println("test");
    }
}

注意:也可以实例化接口

public class Anonymity {
    //匿名内部类
    public static void main(String[] args) {
        //没有名字的初始化类,不用将实例保存到变量中
        //new Inter().test();
        new Inter_2(){
            @Override
            public void test_2() {
            }
        };
    }
}
//接口
interface Inter_2{
    void test_2();
}
posted @ 2024-03-11 00:56  月亮警察  阅读(3)  评论(0编辑  收藏  举报