继承
继承:
- 类,超类和子类
- Object:所有类的超类
- 泛型数组列表
- 对象包装器与自动装箱
- 参数数量可变的方法
- 枚举类
- 反射
- 继承的设计技巧
类,超类和子类:
使用关键字:extends 表示继承
public class A extends B {
...
}
超类 = 基类 = 父类 子类 = 孩子类
使用父类的方法: super
super.fun(); //使用父类的fun方法
super(); //使用父类的构造器方法
多态:可将子类对象赋予给超类变量
Employee e; //Manager extends Employee
e = new Employee(); //OK
e = new Manager(); //ok
强制类型转换:A a = (A) b; 后续使用可能会报错
在超类强转为子类前可以使用:instanceof 监测是否能强转
if(b instanceof a){ //如果b能强转为a,就可以将b转为a给予其他变量使用
c = (a)b;
}
抽象类 abstract
使用abstract关键字的方法不需要具体实现
含有抽象方法的对象必须为抽象对象,抽象对象不可以被实例化
Object:所有子类的超类
equals方法:监测对象是否相等,比较对象的各个属性而非具体地址
hashCode方法:散列码,由对象导出的整型数
每个对象的散列码基本不相同,可以用作区分不同对象的标识
toString方法:返回字符串类型对象信息
泛型数组列表
ArrayList:自定义类型数组
ArrayList<ClassName> a = new ArrayLisrt<>(); //ArrayList数组中全是ClassName类型对象
var b = new ArrayList<ClassName>(); //效果同上,java 10以后可以使用var避免重复书写类名
使用trimToSIze()方法裁剪数组多余部分
数组列表访问对象:
var A = new ArrayList<ClassB>();
A.set(i,Obj); //使用set方法赋值,第几位,赋什么
A.get(i); //获得第几位的信息
A.size(); //获取列表数量,不可以用length
对象包装器和自动包装
有时会需要将int这样的基本类转换为对象,我们称这样的类为包装器:
int - Integet long - Long float - Float double - Double short - Short char - Character boolean - Boolean
前六个类派生于公类Number
包装器类是不可变的,一旦构造便不允许更改其包装在其中的值,同时包装器也是final,不可以派生子类
ArrayList<int> ... //是错误的
ArrayList<Integer> ... //是正确的
参数数量可变的方法
在类后加上… 即可
public static double max(double... values){
double larger = Double.NEGATIVE_INFINITY
for(double v : values) if (v>larger) larger = v;
return larger;
}
double a = max(3.1, 40.2, -5);
枚举类
public enum Size { SMALL, MEDIUM, LAGER, EXTRA_LARGE };
//枚举的各个方法
static Enum valueOf(Class enumClass, String name) //返回给定类中有指定名字的枚举常量
String toString() //返回枚举常量名
int ordinal() //返回枚举常量在enum声明中的位子,从0开始记数
int compareTo(E other) //如果枚举常量在other之前,返回负整数;如果other==this,返回0;否则返回正整数。枚举常量次序在enum声明中给出
反射
能够分析类能力的程序被成为反射
Class类:
Employee A;
Class cl = a.getClass(); //保存一个Class类型实例,可以使用对应方法,如getName()
String name = cl.getName(); //name = "Employee"
String ckassName = "java.util.Random";
Class cl = Class.forName(className); //效果同上
Class c1 = Employee.class; //效果同上
异常:非检查型异常(unchecked),检查型异常(checked)
异常可以通过在类名后添加 throws … 对应语句
资源 :
Class cl = ResourceTest.class;
URL url = cl.getResource("b.gif");
... //多种方法
检查类的结构:FIeld,Method,Constructor
java.lang.reflect 中的三个方法:FIeld,Method,Constructor 分别用于返回 字段,方法 和 构造器 的名称
其中:getDeclareFields,getDeclareMethods,getDeclareConstructors 返回声明中的全部字段,方法,构造器的数组
通过setAccessible方法可以覆盖Java的访问控制,避免私有属性调用报错
newInstance方法:
提供Array的元素类型,提供数组长度即可生成对应数组
invoke方法:
允许调用Method中的方法
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 IT蛋的个人博客!