JAVA核心技术卷1_读书笔记 03_继承(第5章)

114 阅读3分钟

一、类、超类和子类

1、子类与父类

  • 使用关键字extends来表示继承
  • 应该将更一般的方法放在父类中,而将更特殊的方法放在子类中

2、子类构造器

  • 使用super调用构造器的语句必须是子类构造器的第一条语句
  • 如果子类的构造器没有显式地调用超类的构造器,将自动地调用超类的无参数构造器
  • super关键字有两个含义,一是调用超类的方法,二是调用超类的构造器
  • 一个对象变量可以指示多种实际类型的现象称为多态,在运行时能够自动地选择适当的方法,称为动态绑定

3、多态

  • 可以用is-a“关系来判断继承关系,它指出子类的每个对象也是超类的对象
  • "is-a"原则的另外一种表述——替换原则:它指出程序中出现超类对象的任何地方都可以使用子类对象替换
  • 子类的引用可以赋值给超类变量,反之则不行
  • 在覆盖一个方法时,子类方法不能低于父类方法的可见性,如果父类是public的,则子类也必须为public

4、抽象类

  • 用abstract关键字来修饰抽象类
  • 包含一个或多个抽象方法的类本身必须被声明为抽象的
  • 除了抽象方法外,抽象类还可以包含字段和具体方法
  • 抽象方法充当着占位方法的角色,它们在子类中具体实现
  • 扩展抽象类有两种选择:

1)在子类中保留抽象类中的部分或所有抽象方法仍未定义,这样就必须将子类也标记为抽象类

2)子类定义抽象类的全部方法,这样子类就不再是抽象的了

  • 即使不含抽象方法,也可以将类声明为抽象类
  • 抽象类不能实例化,但可以创建一个具体子类的对象
  • 可以定义一个抽象类的对象变量,但是这样一个变量只能引用非抽象子类的对象

5、受保护访问

  • 子类也不能访问超类的私有字段
  • JAVA中四个访问控制修饰符:

1)仅对本类可见——private

2)对外部完全可见——public

3)对本包和所有子类可见

4)对本包可见——默认,不需要修饰符

6、相等测试

没看懂……

7、泛型数组列表

  • 声明和构造一个保存Employee对象的数组列表:

    ArrayList staff = new ArrayList();

在JAVA10中,可以使用var关键字以避免重复写类名

var staff = new ArrayList<Employee>();

如果不使用var关键字,可以省略右边的参数类型

ArrayList<Employee> staff = new ArrayList<>();    //菱形语法
  • 访问数组列表元素

不能使用[ ]来访问数组列表元素,应使用get和set方法

staff.set(i,Harry);

8、自动装箱与自动拆箱

  • 所有的基本类型都有一个与之对应的类,如,int对应Integer,这些类称为包装器(wrapper)
  • JAVA在某些时候会自动地识别并把基本类型转换为其所对应的类的对象,或把基本类型对应类的对象转换回基本类型,这叫做自动装箱(autoboxing)或自动拆箱
  • 装箱与拆箱是编译器要做的工作,不是虚拟机,编译器在生成类的字节码时会插入必要的方法调用