一、泛型
1、为什么要使用泛型?
没有泛型的的时候,任何类型都可以添加到集合中,不安全;每次取值后,需要类型强制转换,繁琐。
2、核心思想:把一个集合中的内容限制为一个特定的数据类型,注意:泛型只能使用引用数据类型
3、
(1)在集合中使用泛型(掌握)
--1:声明了泛型类,但没有使用泛型,返回一个object类型(有泛型,但是不可以使用)。
--2:当实例化泛型对象时,需要指明泛型的类型。
--3:指明后,对应的类型中所有泛型的位置,都变成实例化中指定的泛型类型。
--4:当自定义泛型类型时,在实例化时没有使用泛型,默认为object类型。
--5:静态方法不能使用类的泛型。
--6:如果泛型类是一个接口或抽象类,则不能创建泛型类的对象。
--7:从泛型类派生子类,泛型类型需要具体化。
(2)自定义泛型类,泛型接口,泛型方法(理解)
二、类中四大基本属性
private、public、protected、default。
同一个类 同一个包 子类 任何地方 private yes no no no 缺省 yes yes 同一个包yes no 不同一个包no 受保护的 yes yes yes no 公有的 yes yes yes yes yes表示可以,no表示不可以
三、继承
(1)含义:子类继承父类的属性和行为,并能根据自己的需求扩展出新的属性和行为,提高了代码的可复用性,关键字extends。
eg:Class A extends B{},A类为子类,B类为父类、基类、超类。
super():代表父类的内存空间标示。
this():当前对象的引用。
(2)方法的重载与重写
--重载:同一个类中,同一个名,不同的参数列表,注意:方法的重载与方法的返回值无关和修饰符无关,构造器是可以重载的。
--重写:前提是在继承类的基础上,子类在获取父类结构以后,可以对父类中同名的方法进行“重构”。规则:方法的返回值,方法名,形参列表相同。子类的权限修饰符不小于父类的同名方法。
--当子父类中出现相同方法时,会先运行子类中的方法。
--静态方法可以被继承,但是不能被重写。
四、封装
(1)含义:把对象的属性和行为(方法)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。在类中,属性一般都用private进行修饰,用getter和setter方法作为和属性进行操作的接口。
五、多态
(1)含义:不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态;具体的实现方式就是:接口实现,继承父类进行方法重写,同一个类中进行方法重载,可以理解为是一个事物的多种表现形式。
(2)使用多态的前提:类的继承、子类对父类方法的重写、父类引用指向子类的对象。
(2)注意:
--1:当父类中的方法只有在父类中定义而在子类中没有重写的条件下,只能被父类类型的引用调用。
--2:对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类的这个方法(动态绑定)。静态绑定:static,final,private被修饰的,会在编译是解析,因为编译器JVM知道他们不会被重写。
--3:对于多胎来说,编译时,看“左边”,将此引用变量理解为父类的类型,执行时看“右边”,关注真正的实体子类对象,子类的对象执行的方法就是子类重写的。
--4:向上造型:父类 A = new 子类B();向下造型:子类B = (子类)父类对象A,用instanceof判断当前对象是不是一个类的实例。
--5:子类对象的多态性,并不使用于属性。(属性是不能被重写的)。
六、static关键字
static关键字修饰属性:
1、非静态的属性,根据每个实例加载一套。
2、静态的属性,所有的实例公用一个静态域属性;任何一个实例对其修改,会导致其他对象的也改变。
3、有对象后,可以用"对象.类变量"使用。但是"类.实例变量"不行。
4、类变量是存储在静态域中的。
static关键字修饰方法:
1、随着类的加载,在内存中也是独一份的。
2、可以直接通过"类.类方法"的方式调用。
3、静态方法只能调用静态属性和静态方法,不能调用实例变量。
4、静态方法也不能调用this()和super()。
七、final关键字
final,finally,finalize()。
final关键字可以修饰类、属性、方法为“最终的”,不能更改了。
1、final标记的类不能被继承。
2、final标记的方法不能被重写。
3、final标记的变量即为常量,且只能赋值一次,默认初始化不能被使用。