zoukankan      html  css  js  c++  java
  • JAVA- 内部类

    内部类

    public class InnerDemo {
        
        class Inner{
            public void innerMethod(){
                System.out.println("this is inner method");
            }
        }
        public Inner getInnerInstance(){
            return this.new Inner();
        }
        
        public static void main(String[] args) {
            //获取内部对象,这是第一种
            InnerDemo innerDemo = new InnerDemo();
            Inner inner = innerDemo.new Inner();
            
            //获取内部对象,这是第二种
            InnerDemo innerDemo1 = new InnerDemo();
            Inner inner1 = new InnerDemo().getInnerInstance();
        
        }    

    成员内部类

    定义了成员内部类后必须使用外部类对象来创建内部类对象,而不能世界去new 一个内部类对象,即

    内部类 对象名 = 外部类对象.new 内部类()

    一般来说,编译内部类后生成的类文件是以“外部类名称$内部类名称.class” 这种形式命名的,但在Java语言中,只要存在$,就应将其替换为 “ . ” 。

    public class InnerDemo{
        class Inner{
         
        }
    }

     成员内部类,只要外部这个类还在内存当中,这个成员内部类就会驻留在内存。

    局部内部类

    public class InnerDemo1 {
        public void call(){    //这是一个方法
            class Inner{       //这是一个方法里的局部内部类
                
            }
        }
    }

    局部内部类随着方法的弹栈而被销毁。

    匿名内部类

    定义匿名内部类的时候,必须要有接口或抽象类。这个匿名内部类还得写成一个局部的匿名内部类。

    这个是非匿名内部类实现一个接口的代码:

    interface Inner{
        void call();
    }
    public class InnerDemo1 {
        public void say(){
            class InnerImpl implements Inner{
                @Override
                public void call() {
                }
            }
        }
       
    }

    静态内部类

    public class InnerDemo {
       static String name; //InnerDemo.name
       static class Inner{ //获取到该静态内部类构造器InnerDemo.Inner(),构造器获取实例对象new InnerDemo.Inner();
            public void function(){
                System.out.println("this is inner method");
            }
       }
    }
      class Outer{ //定义外部类 

            String info="Welcome,everybody"; //定义外部类的私有属性

            class Inner{ //定义内部类
                public void print(){ //定义内部类的方法
                  System.out.println(info); //直接访问外部类的方法
                  }
                }
                public void fun(){ //定义外部类的方法
                new Inner().print(); //通过内部类的匿名对象调用内部类的print()方法
            }
      }
      public class OuterInner {


        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Outer out = new Outer();
            Outer.Inner in = out.new Inner();
            in.print();

            }

      }

  • 相关阅读:
    form编码方式application/x-www-form-urlencoded和multipart/form-data的区别
    CentOS开启telnet服务
    借助英语搞清会计中“借”/“贷”的含义(转载)
    乘法器的Verilog HDL实现(转载)
    Meth | 关闭mac自带apache的启动
    Meth | Git冲突:commit your changes or stash them before you can merge. 解决办法
    Meth | Git 避免重复输入用户名和密码方法
    Meth | git Please move or remove them before you can merge
    Meth | git 常用命令
    Meth | 小团队git开发模式
  • 原文地址:https://www.cnblogs.com/RzCong/p/6852288.html
Copyright © 2011-2022 走看看