oop_promax_innerclassAndEnumAndGeneralizdType

innerclass

/*
!!!成员内部类是什么?如何创建对象?
    1.就是类中的一个普通成员,类似普通成员变量、成员方法。
    2.外部类名.内部类名 对象名 = new 外部类(...).new 内部类(...);

!!!成员内部类的实例方法中,访问其他成员有啥特点?
    1.可以直接访问外部类的实例成员、静态成员。
    2.可以拿到当前外部类对象,格式是:外部类名.this。

!!!什么是静态内部类?如何创建对象?有啥特点?
    1.有static修饰的内部类。
    2.外部类名.内部类名 对象名 = new 外部类.内部类(...);
    3.可以访问外部类的静态成员,不能直接访问外部类的实例成员。

!!!匿名内部类的书写格式是什么样的/
    new 类或接口(参数值){                      new Animal(){
        类体(一般是方法重写);                        @Override
    };                                              public void cry(){
                                                    }
                                              };
!!!匿名内部类有啥特点?
    1.匿名内部类本质就是一个子类,并会立即创建出一个子类对象。

!!!匿名内部类有啥作用、应用场景?
    1.可以更方便的创建出一个子类对象。
    2.匿名内部类通常作为一个参数传输给方法。
    3.匿名内部类通常不会主动的使用而是被动的使用,可以简化代码,提高开发效率。
*/

enum

/*
枚举的特点:
    public enum A{
        X,Y,Z;
    }
    Compiled from "A.java"
    public final class A extends java.lang.Enum<A>{
        public static final A X = new A();
        public static final A Y = new A();
        public static final A Z = new A();

        public static A[] values();     //可以拿到全部对象并放入枚举数组中
        public static A valueOf(java.lang.String);      //可以拿到对应名称的对象

    }

1.枚举类的第一列只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象。
2.枚举类的构造器都是私有的,因此,枚举类对外不能创建对象。
3.枚举类都是最终类,不可以被继承。
4.枚举类中,从第二行开始,可以定义类的其他各种成员。
5.编译器为枚举类新增了几个方法,并且枚举类都是继承:java.lang.Enum类的,从enum类也会继承到一些方法。

!!!抽象枚举是什么?
    抽象枚举是指枚举中有抽象方法,所以枚举列举的所有名称都必须重写抽象方法,此时枚举类的名称前可以不用abstract修饰。


!!!枚举的常见应用场景:
    1.用来表示一组信息,然后作为参数进行传输。
    2.选择定义一个一个的常量来表示一组信息,并作为参数传输。
        1.参数值不受约束。
    3.选择定义枚举表示一组信息,并作为参数传输。
        1.代码可读性好,参数值得到了约束,对使用者更友好,建议使用!
*/

generalized type

/*
泛型:
    1.定义类、接口、方法时,同时声明了一个或者多个类型变量(如:<E>),称为泛型类、泛型接口、泛型方法、
    它们统称为泛型。
    2.作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,
    及其可能出现的异常。
    3.泛型的本质:把具体的数据类型作为参数传递给类型变量。

泛型类:
    1.修饰符 class 类名<类型变量,类型变量,...>{   public class ArrayList<E>{
      }                                            ...
                                                }
    2.注意:类型变量建议用大写的英文字母,常用的有:E,T,K,V等。
    3.使用extends修饰符可以限制类型变量接收的数据类型:
    public class ArrayList<E extends F>{
          ...
    }

泛型接口:
    1.修饰符 interface 类名<类型变量,类型变量,...>{   public interface ArrayList<E>{
      }                                            ...
                                                }
    2.注意:类型变量建议用大写的英文字母,常用的有:E,V,K,T等。
    3.使用extends修饰符可以限制类型变量接收的数据类型:
    public interface ArrayList<E extends F>{
          ...
    }

泛型方法:
    1.修饰符  <类型变量,类型变量,...> 返回值类型 方法名 (形参列表){
      }
      public static <T> void test(T t){
        ...
      }
    2.通配符
        1.就是"?",可以在"使用泛型"的时候代表一切类型; E T K V是在定义泛型的时候使用。

    3.泛型的上下限:
        1.泛型上限: ?extends Car:?能接受的必须是Car或者其子类。
        2.泛型下限: ?Super Car:?能接受的必须是Car或者其父类。

!!!泛型的擦除问题和注意事项:
    1.泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除。
    2.泛型不支持基本数据类型,只能支持对象类型(引用数据类型)。
*/
posted @ 2024-04-02 11:26  qing集  阅读(3)  评论(0编辑  收藏  举报