JavaSE(三) 继承

子类覆盖方法

子类的方法不能直接访问父类的私有域,只有使用特殊关键字 super 里调用父类的方法才能去访问父类的私有域。

特殊关键字 super this

this 关键字有两个用途:(1)引用隐式参数 (2)调用该类的其他构造器;
super 关键字也有两个用途:(1)调用超类的方法 (2)调用超类的构造器。super 不是一个对象的引用,不能将 super 赋值给一个对象变量。它只是一个特殊关键字。

子类构造器

如果子类没有显示调用父类的构造器(使用特殊关键字 super),则将自动的调用父类默认的构造器(无参构造器)。如果父类没有无参构造器,而子类有没有显示的调用父类的其他构造器,编译器将报错。

多态

不能将一个父类的引用赋给子类变量

final 类

不允许拓展的类被称为 final 类。类中的方法也可以被定义为 final,这样子类就不能覆盖这个方法。(final 类中的方法将自动成为 final 方法,但是 final 类中的域并不能自动成为 final 域)。

强制类型转换

将子类的一个变量赋给一个父类变量,编译器是允许的。但是将一个父类的引用赋给一个子类变量就必须进行类型转换:

Manager boss  =  (Manager) staff [0];

在类型转换之前需要使用 instanceof 操作符看一下是否能转换成功:

if (staff[1] instanceof Manager){
	boss = (Manager) staff[1];
}

综上:
1:只有在继承层次内进行类型转换;
2:在父类转换为子类之前应该使用 instanceof 进行检查;

抽象类

抽象类不能被实例化,也就是说如果一个类声明为 abstract,就不能创建这个类的对象;
拓展抽象类可以有两种选择:(1)在抽象类中定义部分抽象方法或不定义抽象方法,这样就必须将子类也标记为抽象类。(2)定义全部的抽象方法,这样子类就不是抽象的了。
可以定义一个抽象类的对象变量,但它只能引用非抽象子类的对象:

Person p = new Student(...);

protected

将父类中方法或域设置为 protected,子类就可以访问父类中的这些方法或域。

Object:所有类的父类

Object 类型的变量可以引用任何类型的变量;
Java 中只有基本类型不是对象。

equals 方法

Object 类中的 equals 方法用于检测一个对象是否等于另一个对象。在 Object 类中,这个方法将判断两个方法是否具有相同的引用。如果两个对象的状态相等,就认为这两个对象是相等的。
在子类中定义 equals 方法时,首先调用父类的 equals 方。如果检测失败,对象就不可能相等,如果父类中的域都相等,就需要比较子类中的实例域。

  • static Boolean equals(type[] a,type[] b) 如果两个数组长度相同,并且相应位置上数据元素也相同,将返回 true。
  • static Boolean equals (Object a,Object b) 如果 a 和 b 都为 null,返回 true,如果只有其中之一为 null,返回 false;否则返回 a.equals(b)。

泛型数组列表

ArrayList 是一个采用类型参数的泛型类

ArrayList<Employee> staff = new ArrayList<>;

使用 add 方法可以将元素添加到数组列表:

staff.add(new Employee(..));

可以调用 trimToSize 方法将存储区域的大小调整为当前元素数量送需要的存储空间数目;
使用 get 和 set 方法实现访问或改变数组元素的操作。
使用 toArray 方法可以将数组元素拷贝到另一个数组中:

ArrayList<X> list = new ArrayList<>();
while(){
	x = ...;
	list.add(x);
}

X[] a = new X[list.size()];
list.toArray(a);

对象包装器和自动装箱

将基本类型转换为对象需要对象包装器:Integer,Double,Long,Float,Short,Byte,Character,Void,Boolean。对象包装器类时 final,不能定义他们的子类。

枚举类

在比较两个枚举类型的值时,永远不需要调用 equals,而直接使用 == 就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值