• Java 继承、多态、ArrayList、枚举


    继承

    Java中只有公共继承,没有私有继承和保护继承

    多态

    C++中如果希望实现动态绑定,需要将成员函数声明为virtual,而在Java中,动态绑定是默认的行为。

    若不希望一个方法是虚拟的,可以将其标记为final

    强制类型转换

    • 只能在继承层次内进行强制类型转换
    • 在将超类强制转换位子类之前,应该使用instanceof进行检查

    尽量少用强制类型转换,如果转换失败会抛出ClassCastException异常,而没有捕获ClassCastException异常的话,会使程序终止

    重写equals方法的建议

    1. 参数命名为otherObject。
    2. 检测this和otherObject是否相等(只是优化)
    if(this == otherObject) return true;
    
    • 1
    1. 检测otherObject是否为null
    if(otherObject == null) return false;
    
    • 1
    1. 比较this与otherObject的类

      1. 若equals语义在子类中改变,则使用getClass检测。
      if(getClass() != otherObject.getClass()) return false;
      
      • 1
      1. 若在所有子类中equals语义相同,则使用instanceof检测。
      if(!(otherObject instanceof ClassName)) return false;
      
      • 1
    2. 将otherObject强制转化为相应类类型的变量

    ClassName other = (ClassName) otherObject;
    
    • 1
    1. 根据相等性概念要求来比较
    return field1 == other.field1 && field2 == other.field2 && ......;
    
    • 1

    String getName() 可以返回这个类的名字

    Class getSuperclass() 可以返回这个类的超类

    Class.forName(className) 获取类名对应的Class对象

    ArrayList

    import java.util.ArrayList;
    
    public class C531 {
        public static void main(String[] args) {
            // 设置数组初始容量
            // 创建ArrayList时,若能估计出数组可能存储的元素数量,就可以在填充数组之前调用ensureCapacity方法
            // 或者将初始容量直接传入构造器。这样前100次调用不会因为数组扩容带来额外的时空开销。
            ArrayList<String> arrayList1 = new ArrayList<>();
            arrayList1.ensureCapacity(100);
            ArrayList<String> arrayList2 = new ArrayList<>(100);
            // 添加元素
            arrayList1.add("hi");
            arrayList1.add(1, "study?"); // 将元素插入到指定位置,并后移其他元素
            System.out.println(arrayList1);
            // 访问元素
            System.out.println(arrayList1.get(0));
            // 修改元素
            System.out.println(arrayList1.set(0, "hi what hi")); // 会返回之前的元素内容
            arrayList1.set(1, "study!");
            System.out.println(arrayList1);
            // 删除元素
            arrayList1.remove(0);// 将后面的元素前移
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    枚举

    static Enum valueOf (Class enumClass, String name) 返回给定类中有指定名字的枚举常量

    String toString() 返回枚举常量名

    int ordinal() 返回枚举常量在enum声明中的位置,位置从0开始计数

    int compareTo(E other) 枚举常量出现在other之前便返回负数,相等则返回0,否则返回整数。

    public enum C56 {
        SMALL("s"), MEDIUM("M"), LARGE("L");
        private String size;
    
        // 构造函数必须为private
        private C56(String s) {
            this.size = s;
        }
    
        public String getSize() {
            return size;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    UML(Unified Modeling Language)统一建模语言,及工具介绍、使用
    BUUCTF Reverse/firmware
    关于Oracle中的关闭和启动数据库的几种方式(五)
    axios和SpringMVC数据交互(一维二维数组,JSON/form形式,@RequestBody/@RequestParam)
    TS复习-----TS中的类
    不同的量化交易软件速度差距大吗?
    使用正则提取一段富文本html内容的所有图片路径src
    (STM32)从零开始的RT-Thread之旅--PWM驱动ST7735调光
    C++学习(四八七)android studio println的输出位置
    速盾网络:CDN用几天关了可以吗?安全吗?
  • 原文地址:https://blog.csdn.net/qq_46039856/article/details/127561754