Java 学习心得(三)----继承与多态
1.类、超类与子类
- class A extends B{}
- 其中类A 称之为子类,类B称之为父类;
- 子类会继承父类所有的属性以及方法,但是对于private访问权限的属性以及方法不能直接调用,因此父类private 方法不能被重载。
- 重载机制:
- 发生于父类与子类之间;
- 子类的重载方法与父类的方法名与形参列表完全相同;
- 重载方法抛出异常与返回值类型范围比父类方法小;
- 重载方法的访问权限应高于父类方法
2. 多态
- 父类变量指向子类对象;
- 指向子类对象的父类变量需要操作子类方法时需要进行强制类型转换,在类型转换之前进行 instanceof 检查。
3. final 关键字
- 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
- 当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法。
- 使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升(现在的Java版本已经不需要使用final方法进行这些优化了)。类中所有的private方法都隐式地指定为fianl(因此不能重载)。
4.抽象类
- 抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。
- 抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。
- 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:
- 抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
- 抽象类不能用来创建对象;
- 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
5.自动装箱与拆箱
- 装箱:将基本类型用它们对应的引用类型包装起来;
- 拆箱:将包装类型转换为基本数据类型;
6.可变长参数
- 在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用,例如print(“hello”);print(“hello”,“lisi”);print(“hello”,“张三”, “alexia”);
- 使用…表示可变长参数,例如
print(String… args){
…
} - 在具有可变长参数的方法中可以把参数当成数组使用,例如可以循环输出所有的参数值。
print(String… args){
for(String temp:args)
System.out.println(temp);
}
7.反射
反射介绍比较清楚的链接为: link.