文章目录
- 泛型
- 1.泛型是什么,使用泛型的好处
- 2.泛型中的限定通配符和非限定通配符
- 3.泛型擦除
- 内部类
- 多继承
- 多继承使用:
———————————————————————————
泛型
1.泛型是什么,使用泛型的好处
泛型就是把类型参数化,在编译的时候才确定具体的参数。
比如在 jdk1.5之前没有泛型的时候,我们使用ArrayList集合,存了一个String类型的字符串,又存了一个Integer类型的数字,取出的时候都要强转一下。但是jdk1.5有了泛型以后:
①:确保了我们的类型安全,类编译的时候。会进行泛型检查,如果一个集合被声明为String 类型,那么它往该集合存取数据的时候就会
对数据进行判断,从而避免存入或取出错误的数据。在编译的时候就可以检查出来因为类型不正确导致的异常(ClassCastException)
②:泛型只存在于编译阶段,而不存在于运行阶段,在编译后的 class文件中跟不使用泛型时写的代码几乎一致,因为在编译器编译的时候会通过类型擦除,去掉类型参数。
2.泛型中的限定通配符和非限定通配符
限定通配符对类型进行了限制,有两种限定通配符,一种是<? extends T>它通过确保类型必须是T的子类来设定类型的上限;
另一种是<? super T>它通过确保类型必须是T的父类来设定类型的下界。泛型类型必须用限定内的类型来进行初始化,否则会导致编译错误。
3.泛型擦除
首先泛型是jdk5之后加入的特性,泛型的内部是通过擦除来实现的。比如说我们在list集合里放入一个Integer类型的数据,我们执行一个list.add(10)的操作,在java编译的时候,实际上添加的类型是object的。当我们执行get方法取值的时候,编译器还会做一个类型强转的操作,如果接受的类型是int的话,还会做一个自动拆箱的操作。—java语法糖。
内部类
- 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
- 内部类可以使用外部类定义的对象属性,外部类中,private修饰的变量,在内部类也可以使用
- 外部类有的东西,内部类都可以写
- 内部类的方法可以使用外部类的变量
- 内部类的方法只能在定义内部类的区域使用,另外新建一个文件,是无法访问到的
广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。
- 成员内部类
成员内部类看起来像是外部类的一个成员,只有成员内部类才能加static变成静态内部类。
外部类也可以访问内部类的所有成员变量和方法(包括private),必须先创建一个成员内部类的对象来访问
- 局部内部类
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。
- 匿名内部类
匿名内部类是唯一一种没有构造器的类。大部分匿名内部类用于接口回调。匿名内部类在编译的时候由系统自动起名为Outter$1.class。一般来说,匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。比如 :
new Runnable(){ @override public void run() {}}
- 静态内部类
- 它的创建是不需要依赖于外围类的对象
- 它不能使用任何外围类的非static成员变量和方法(因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象)
- 静态内部类内允许有static属性、方法;
- 静态内部类是指被声明为static的内部类,可不依赖外部类实例化;而非静态内部类需要通过生成外部类来间接生成。
总结:
多继承
在静态的方法中使用非静态的方法是无法实现的,静态是属于类的,
java的继承是单继承
内部类可以实现多继承
——>如下图:
多继承使用: