继承:

  • 类,超类和子类
  • 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中的方法