java普遍存在内部类以及内部接口,而内部类有分为静态非静态,访问权限有有所区别,这里总结一下常用的情况:

public class OuterClass {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //实例化非静态内部类需要外部类的实例
        OuterClass oc = new OuterClass();
        Inner1 in1 = oc.new Inner1(); //注意这种语法形式
        in1.inner1Method();
        
        //实例化静态内部类可以用匿名类的形式,不需要外部类实例
        new Inner2().inner2Method();
        //也可以直接向普通类一样实例化,这是因为static 类的生命周期与普通类不一样,在jvm加载类的时候就存在
        //于static区,所有可以直接获取引用调用。
        Inner2 in2 = new Inner2();
        in2.inner2Method();
        //接口的的实例化要么通过它的实现类,要么就重写接口的所有方法
        //而类的内部接口其实可以理解为static因为它的实例化也不需要依靠外部类
        face1 f1 = new face1() {
            
            @Override
            public void faceMethod() {
                // TODO Auto-generated method stub
                System.out.println("f1 is instantiation");
            }
        };
        f1.faceMethod();
        
        //直接用匿名的方式
        new face1(){@Override
        public void faceMethod() {
            // TODO Auto-generated method stub
            System.out.println("f1 is instantiation too");
        }}.faceMethod();
    }
    
    //定义非静态内部类
    public class Inner1{
        public int No = 1;
        public void inner1Method(){
            System.out.println("No is "+ No);
        }
    }
    //定义静态内部类
    public static class Inner2{
        public int No = 2;
        public void inner2Method(){
            System.out.println("No is "+ No);
        }
    }
    //定义内部接口
    public interface face1{
        public static final String Name = "face1";
        public abstract void faceMethod();
    }
}

执行的结果是
No is 1
No is 2
No is 2
f1 is instantiation
f1 is instantiation too
View Code

相关文章:

  • 2021-11-19
  • 2022-12-23
  • 2021-07-31
  • 2021-12-16
  • 2022-01-30
  • 2022-12-23
  • 2021-07-15
  • 2022-12-23
猜你喜欢
  • 2022-01-19
  • 2022-12-23
  • 2021-07-10
  • 2021-11-19
  • 2022-12-23
  • 2020-04-23
相关资源
相似解决方案