zoukankan      html  css  js  c++  java
  • Java内部类

    这篇写得好啊,写的真的好。


    一.内部类

    内部类的注意:
    1.为什么非静态的内部类中不能出现静态的成员
    静态变量是要占用内存的,在编译时只要是定义为静态变量了,系统就会自动分配内存给他,而内部类是在宿主类编译完编译的,也就是说,必须有宿主类存在后才能有内部类,这也就和编译时就为静态变量分配内存产生了冲突,因为系统执行:运行宿主类->静态变量内存分配->内部类,而此时内部类的静态变量先于内部类生成,这显然是不可能的,所以不能定义静态变量!
    2.内部类可以使用static修饰,相当于是外部类的一个静态成员类,并且也可以实例化,不需要new使用外部对象就可以直接使用静态内部类,运行时加载时耗费的资源和时长都比较多,静态类在运行前加载,所以在性能上会有提升。

    二.匿名内部类

    在这里我们看到使用匿名内部类我们必须要继承一个父类或者实现一个接口,当然也仅能只继承一个父类或者实现一个接口。同时它也是没有class关键字,这是因为匿名内部类是直接使用new来生成一个对象的引用。当然这个引用是隐式的。
    
    
    使用方式1)
    interface Person {
        public void eat();
    }
     
    public class Demo {
        public static void main(String[] args) {
            Person p = new Person() {//这样可以使用多次函数,相当于多态
                public void eat() {
                    System.out.println("eat something");
                }
            };
            p.eat();
        }
    }
    使用方式2)
    interface Person {
        public void eat();
    }
     
    public class Demo {
        public static void main(String[] args) {
             new Person() {
                public void eat() {
                    System.out.println("eat something");
                }
            }.eat();//这样只能使用一个函数
        }
    }
    注意事项:

          1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。

          2、匿名内部类中是不能定义构造函数的。

          3、匿名内部类中不能存在任何的静态成员变量和静态方法。

          4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。

          5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

    6匿名内部类使用的形参必须是final的,如果不是编译器会直接报错

    7匿名内部类没有构造函数,一般使用局部代码块进行构造chushh

  • 相关阅读:
    IsIconic() OnPaint里的用途
    中值滤波
    一个小学生题库生成器
    音视频同步
    [转]字符编码笔记:ASCII,Unicode和UTF8
    项目中常见bug及解决方法
    TSQL基础chp10可编程对象学习笔记[上]
    使用UdpAppender时出现了“使用了与请求协议不兼容的地址”的解决办法
    .net gridview 任意单击某行跳转到新的页面,并且新页面的参数来自于与gridview中的不可见字段
    数组去重的四种方法
  • 原文地址:https://www.cnblogs.com/wei1/p/9582130.html
Copyright © 2011-2022 走看看