zoukankan      html  css  js  c++  java
  • Classes and Objects :类和对象(2)

    类内部可以有另一个类,也就是内部类,如果带static则为静态内部类
    静态内部类当然不能直接访问实例变量
    内部类修饰符可以有四种,而外部类只有两种
     
    内部类的意义:
    这个内部类只适用于这个外部类
    因为外部类的某些字段是private的,这个内部类要想访问除非是他的成员
    生成的class文件也会在一起的,便于整理
     
    内部类作为类的成员,当然也要有外部类的对象才能访问
    静态内部类的使用,相当于包名

    OuterClass.StaticNestedClass nestedObject =
         new OuterClass.StaticNestedClass();

    非静态的内部类要动态生成:

    OuterClass.InnerClass innerObject = new OuterClass().new InnerClass();

     
    内部类的字段如果覆盖了外部类的 非static字段,要全名访问
    OuterObject.this.x
     
    内部类有两种特殊形式,一是在块中,局部内部类
    局部内部类只能访问所在块中的final变量(跟一般内部类的区别)
    JDK8以后,如果这个局部变量初始化后就没变过,可以不声明为final
    只有方法自己才能访问自己的参数,局部类不可以
    JDK8以后,局部类也可以访问所在方法的参数了
     
    静态方法的局部内部类当然只能访问外部类的静态字段
     
    局部内部类不能有static成员,除非是常量
    接口都是显式static的,所以不可能出现在块中,包括局部内部类里
     
     
    跟局部内部类不同,另一种,匿名内部类只是一个表达式,可以出现在表达式能出现的任何地方
    new,父类名称或接口名称,构造(),类体{}

    HelloWorld frenchGreeting = new HelloWorld() {
                String name = "tout le monde";
                public void greet() {
                    greetSomeone("tout le monde");
                }
                public void greetSomeone(String someone) {
                    name = someone;
                    System.out.println("Salut " + name);
                }
            };

    这个类体里面定义的是一个子类或者实现类,会有覆盖或实现的方法
     
    匿名内部类也是外部类的成员,访问规则同一般内部类或局部内部类
    另外匿名内部类是没有构造的
     
    局部内部类通常用来定义一个内部类型
    匿名内部类通常用来实现接口,且多用于界面编程
     


    Lambda 表达式(略)
    Enum(枚举)

    public enum Day {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY,//不加引号
        THURSDAY, FRIDAY, SATURDAY //后面没东西的话可以不加分号
    }

     枚举是一个类,可以有字段和方法的定义,且自带一些方法,如values()

    for (Day d : Day.values()) {

     枚举都是显式继承java.lang.Enum,所以不能继承其他了
    构造或者是默认,或者是private,且不能手动调用

  • 相关阅读:
    tensorflow学习笔记----TensorBoard讲解
    tensorflow学习笔记----tensorflow在windows的安装及TensorBoard中mnist样例
    vmware workstation环境下虚拟机固定ip的设置
    一致性协议之Paxos算法
    一致性协议之二阶段提交和三阶段提交
    红黑树
    kibana增加验证
    Linux安装nodejs和npm
    Gnu pgp加密解密
    linux记录每次登陆的历史命令
  • 原文地址:https://www.cnblogs.com/gcg0036/p/4143612.html
Copyright © 2011-2022 走看看