面向对象 是一种软件开发思想,是对现实世界的一种抽象,会把相关的数据和方法当成一个整体来看待。
抽象思想:是将一类事物的共同特征总结出来创建类的过程,包含数据抽象和行为抽象两个方面。
继承:从已有类(超类)得到继承信息创建新类(子类)的过程,继承让变化的软件系统有了一定的延续性,同时也是封装程序中可变因素的重要手段。
封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治,封闭的对象。
多态:是指允许不同子类型的对象对同一消息做出不同的响应,简单来说就是用同一对象的引用调用同样的方法但是做了不同的事情。实现多态的方法有:方法重写和对象造型。
泛型 :参数化类型。(将类型确认推迟到创建对象或者调用方法的时候来确认)
为啥要使用泛型?
在没有泛型的时候一般使用Object类来指定不确定参数的类型。但是这样一来会导致我们需要做额外的类型转化操作。
可以用在类和方法上;用在类上紧跟类名之后,用在方法上需要先声明 声明在方法返回值类型之前一般用<T>,<E>来指定;
public class Apple<T>{
//此种方法不是泛型方法
public void eat(T t){
System.out.println(t.getClass().getName());
}
//泛型方法
public <E> E palywith(E e){
return e;
}
}
通配符<?>
对于<T>此种类型的泛型我们一般当做某种待确定的类,注意是一种。然而有些时候我们需要处理一个范围内的
类型所以这个时候就需要用到通配符<?>
<?>被叫做无限定通配符
<? extends T> 被称作有上限的通配符。
<? super T> 被称作有下限的通配符。
<?>一般配合集合使用,但是在使用中涉及到具体元素操作时是不被允许的。因为其本身就表示的是一个不确定
范围内的类型,我们不能调用集合的add()等方法,可以使用其get()等操作。有人说,<?>提供了只读的功
能,也就是它删减了增加具体类型元素的能力,只保留与具体类型无关的功能。它不管装载在这个容器内的元
素是什么类型,它只关心元素的数量、容器是否为空。
泛型擦除
泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,专业术语叫做类型擦除
型变:数组和泛型有所不同,假设Foo是Bar的一个子类型(子类或者子接口),那么Foo[]依然是Bar[]的子类
型,但G<Foo> 不是 G<Bar> 的子类型。Foo[]自动向上转型为Bar[]的方式被称为型变,也就是说,Java的数
组支持型变,但Java集合并不支持型变。