欢迎使用CSDN-markdown编辑器

java核心技术卷读书笔记

S5-继承

类、超类与子类

  1. extends关键字

    public class a{
    
    }
    public class b extends a{
    
    }

    b类可以获得a类的所有公共方法和对象并修改其内容,但对于私有对象不能访问,
    并且由于构造器会初始类的私有对象,所以子类的构造器方法要写成下面这样:

    public class a{
        private int a;
        public a(int n){
        a = n;
        }
    }
    public class b extends a{
        public b(){
        super();
        }
    }
  2. final关键字
    final为阻止继承关系的关键字

    public final class a{
    
    }

    这样就不能存在以a为父类的子类了,也可以构造final的方法,效果与类基本一致,子类的方法中就不能重写父类的final方法了

  3. 强制类型转换
    这里要注意的就是父类转化为子类时需要加上子类名称,如

    public class a{
    
    }
    public class b extends a{
    
    }
    public class c{
        public static void main(String[] args){
            a s1 = new a();
            b s2 = (a) s1;
        }
    }

    在类转化时最好加上

    if(s1 instanceof a){
        b s2 = (a) s1;
    }

    如果两个类不属于同一个继承层次时将不进行转化

  4. abstract关键字
    定义抽象类的关键字

    public abstract class a{
        public abstract int get();
    }
    public class b extends a{
        public int get(){
        return 9;
        }
    }
    

    可以在子类中再对这个抽象方法添加代码
    需要注意抽象类不能实例化,如果一个类声明为abstract,就不能创建这个类的对象,表达式new a()是错误的,但可以创建一个子类的对象.
    需要注意,可以定义一个抽象类的对象变量,但它只能指向一个抽象子类的对象.

  5. 受保护访问
    由于类的私有方法和域不能被其他的类或子类访问,而公共的却能被所有类和子类访问和修改,所以出现了protected修饰词,如果将方法或域声明为protected,则只有子类可以访问和修改这些方法和域。
    java
    public class a{
    protected int fun(){
    return 1;
    }
    }
    public class b extends a{
    protected int fun(){
    return 2;
    }
    }

Object:所有类的超类

  • equals方法

    equals方法判断两个对象是否具有相同的引用。

    编写equals方法的步骤:

    1. 显示参数命名为otherObject,稍后需要将它转换成一个叫other的变量
    2. 检测this与otherObject是否引用同一对象:
      if(this == otherObject) return true;

    本句只是优化版本

    1. 检测otherObject是否为null,如果为null,返回false.

      if(otherObject == null) return false;
    2. 比较otherObject与this是否属于同一个类。如果equals的语义在每个子类中有所改变,就使用getClass检测:

      if(getClass() != otherObject.getClass()) return false;

    如果所有的子类都有统一的语义,就使用instanceof检测:

    if(!(otherObject instanceof ClassName)) return false;
    1. 将otherObject转换为相应的类类型变量:

      ClassName other = (ClassName) otherObject;
    2. 使用 == 比较基本类型域,使用equals比较对象域

      return field1 == other.field2 && Object.equals(field2, other.field2) && ...;
      • warning:
        public class E{
            public boolean equals(E other){
        
            }
        }

    此处equals的显示参数类型是E。其结果并没有覆盖Object类的equals方法,而是定义了一个新方法。
    为了避免发生类型错误,可以使用@Override对覆盖超类的方法进行标记;

    @Override public boolean equals(Object other)

    如果出现了错误,并且正在定义一个新方法,编译器就给出错误报告

泛型数组列表

  • ArrayList是一个采用类型参数的泛型类,此类是为了方便在初始化数组时要指定数组的大小而作
  • 常用方法:
    1. boolean add(T obj) 在尾端添加一个元素
    2. int size() 返回当前元素数量
    3. ensureCapacity(int capacity) 确保列表在不重新分配存储空间的情况下就能保存给定数量的元素
    4. trimToSize() 将列表的存储容量削减到当前尺寸
    5. void set(int index, T obj) 设置数组列表指定位置的元素值
      set方法不能设置还未设置的位置数值
    6. T get(int index) 获得指定位置的元素值
    7. void add(int index, T obj) 向后移动元素,插入值
    8. T remove(int index) 删除元素,并将后面的元素向前移动,被删除的元素返回
      • 注意ArrayList的效率远远低于int[],所以一般用它来构造小集合

对象包装器与自动装箱

  • 所有的基本类型都有一个与之对应的类,把这些类叫做包装器
  • 常用方法
    1. int intValue() 以int形式返回Integer对象的值
    2. static String toString(int i)
    3. static String toString(int i, int radix) 返回基于radix进制的表示
    4. static int parseInt(String s)
    5. static int parseInt(String s, int radix)
    6. static Integer valueOf(String s)
    7. static Integer valueOf(String s, int radix)

参数数量可变的方法

  • 代码示例如下:
    java
    public static double max(double... values){
    double largest = Double.MIN_VALUE;
    for (double v:values) {
    if(largest < v){
    largest = v;
    }
    }
    return largest;
    }
    }

    可以这样调用:
    java
    double m = max(1,2,3,2.3);

枚举类

  • 常用方法:
    1. static Enum valueOf(Class enumClass, String name)
    2. String toString()
    3. int ordinal() 返回枚举常量在enum声明中的位置,从0计数
    4. int comparTo(E other) 如果枚举常量出现在other之前返回负值;如果this==other,则返回0.,否则返回正值

反射

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值