2022-07-23 第八组 卢睿 学习心得

继承

今日重点

  1. final关键字
  2. @Override
  3. Object

学习心得

今天的新知识不是很多,有比较充足的时间去复习前面的知识,对继承有了新的理解。

final关键字:最终的,终极的

final可以修饰的结构

  1. 类 public final class
    最终类,终极类
  2. 属性private final String name
    常量,不能重新赋值
    常量的命名规则:单词的所有字母大写,如果是多个单词,用下划线分割
    常量不能只声明,不赋值
  3. 方法 private final void show
    不能被重写

方法的重写

加注解 @Override
我们建议在方法的重写处表明重写的注解

祖先类 :object(最顶级父类)

如果一个类没有明确的写出它的父类是谁,那它的的父类就是Object
一个类没有使用extends关键字标识继承关系,默认继承于Object类
Java类中每个类都可以使用Object类所定义的方法

Object类中有11个方法

  1. hashCode();它的返回值实际上就是对象运行时的内存地址。
  2. equals(),和==没区别,比地址,为了让子类重写。
  3. toString(),转换成字符串,当我们直接使用对象时,会默认调用toString方法
    为了让子类重写
  4. finalize(),垃圾回收的方法
  5. 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+",");
            }
        }
    }
}

posted @ 2022-07-23 21:18  LegendR  阅读(25)  评论(0)    收藏  举报