2022-07-23 第八组 卢睿 学习心得
继承
今日重点
- final关键字
- @Override
- Object
学习心得
今天的新知识不是很多,有比较充足的时间去复习前面的知识,对继承有了新的理解。
final关键字:最终的,终极的
final可以修饰的结构
- 类 public final class
最终类,终极类 - 属性private final String name
常量,不能重新赋值
常量的命名规则:单词的所有字母大写,如果是多个单词,用下划线分割
常量不能只声明,不赋值 - 方法 private final void show
不能被重写
方法的重写
加注解 @Override
我们建议在方法的重写处表明重写的注解
祖先类 :object(最顶级父类)
如果一个类没有明确的写出它的父类是谁,那它的的父类就是Object
一个类没有使用extends关键字标识继承关系,默认继承于Object类
Java类中每个类都可以使用Object类所定义的方法
Object类中有11个方法
- hashCode();它的返回值实际上就是对象运行时的内存地址。
- equals(),和==没区别,比地址,为了让子类重写。
- toString(),转换成字符串,当我们直接使用对象时,会默认调用toString方法
为了让子类重写 - finalize(),垃圾回收的方法
- clone(),克隆
案例(超级数组)
import java.util.ArrayList;
/*
超级数组
*/
public class SuperArray {
//数组
//维护一个数组,要考虑的是怎么存。
private Integer[] array;
//超级数组的长度
private int size;
//数组当前的容量
private int capacity;
public SuperArray() {
this(10);
}
public SuperArray(int capacity) {
array = new Integer[capacity];
this.capacity = capacity;
}
//添加数据,默认添加,在数组的尾部添加
public boolean add(Integer data) {
//添加时要确保容量足够。如果不够就需要扩容
ensureCapacity(size + 1);
//真正的添加数据
array[size++] = data;
return true;
}
//添加数据,传入两个参数
//在指定位置添加
public void add(int index, Integer data) {
ensureCapacity(size + 1);
System.arraycopy(array, index, array, index + 1, size - index);
array[index] = data;
size++;
}
//获取超级数组的长度
public int size() {
return size;
}
//获取指定下标的元素
public Integer get(int index) {
//判断index的合法性
if (rangeCheck(index)) {
return array[index];
} else {
throw new ArrayIndexOutOfBoundsException("");
}
}
private boolean rangeCheck(int index) {
//index>=0
//index<size
return (index >= 0 && index < size);
}
//这个方法只在当前类中使用,所以声明private
private void ensureCapacity(int needCapacity) {
//System.out.println(needCapacity + "--------" + capacity);
capacity = capacity + 1;
//创建一个新的已经扩容好的数组
Integer[] newArray = new Integer[capacity];
//把元数组中的元素拷贝过来
/*src:原数组
* srcPos:拷贝原始数组起始位置
* dest:目标数组
* destPos:目标数组的起始位置
* length:拷贝数据的长度*/
System.arraycopy(array, 0, newArray, 0, array.length);
array = newArray;
}
public boolean delete(int index) {
if(index<0||index>array.length-1){
return false;
}
for (int i = index; i < array.length - 1; i++) {
array[i] = array[i + 1];
}
// 最后一位数据赋值为0,占位,同时告知用户这是一个无效数据
array[array.length - 1] = null;
return true;
}
public boolean update(int index,int sum){
if(index<0||index>array.length-1){
return false;
}else {
array[index]=sum;
return true;
}
}
public Integer[] getArray() {
return array;
}
}
测试类
public class Test {
/*
* 把之前对于数组的操作
* 添加数据√
* 在指定位置添加数据√
* 删除数据
* 删除指定位置的数据
* 修改数据
* 获取指定位置的数据√
* 获取数组的长度√
*
* 封装一个超级数组,好多方法
* 创建这个超级数组的时候,不需要指定长度
*
*
* */
public static void main(String[] args) {
SuperArray superArray=new SuperArray();
superArray.add(1);
superArray.add(2);
superArray.add(3);
superArray.add(4);
superArray.add(5);
superArray.add(3,33);
for (int i = 0; i < superArray.size(); i++) {
System.out.print(superArray.get(i)+",");
}
System.out.println();
superArray.delete(0);
superArray.update(2,5);
for (Integer integer : superArray.getArray()) {
if(integer!=null){
System.out.print(integer+",");
}
}
}
}

浙公网安备 33010602011771号