“核心技术:继承”的版本间差异

来自Wikioe
跳到导航 跳到搜索
无编辑摘要
第3行: 第3行:
== 类、超类和子类 ==
== 类、超类和子类 ==


=== 定义子类 ===
关键字 extends 表示正在构造的新类(subclass子类;derived class派生类;child class孩子类)派生于一个已存在的类(superclass超类、base class基类、parent class父类)
=== 覆盖方法 ===
父类中的某些方法对子类并不一定适应,需要子类对方法覆盖(override);
* 子类不能之间访问父类的私有域,必须使用父类私有域对应的公有访问接口;
* 子类可以增加域、增加方法、覆盖方法,但不能删除继承的域和方法;
* 覆盖一个方法的时候,子类方法不能低于超类方法的可见性;
“super”关键字用于只是编译器调用父类方法。
* super与this不同,并非一个对象的引用,不能将super赋给另一个对象变量;
=== 子类构造器 ===
子类构造器中:
* 如果使用super显示调用父类构造器,则该语句必须是子类构造器的第一条语句出现;
* 如果没有显示调用父类构造器,则将自动地调用父类默认(没有参数)的构造器;
* 如果没有显示调用父类构造器,且父类没有无参构造器,则Java编译器将报告错误;
=== 多态 ===
有一个用来判断是否应该设计为继承关系的规则:“is-a”,即“'''置换法则'''”,'''程序中出现超类对象的任何地方都可以用子类对象置换'''。
* 一个对象可以指示多种实际类型的现象,被称为'''多态'''(polymorphism);<br/>
*: 如,Employee既可以引用一个Employee对象,也可以引用Employee的子类对象(如,Manager)
* 在运行时能自动地选择调用哪个方法的现象,被称为'''动态绑定'''(dynamic binding);<br/>
* 如果方法是private方法、static方法、final方法,那么编译器可以准确地知道应该调用的方法,这种调用方式被称为'''静态调用'''(static bingding);
=== 阻止继承:final类和方法 ===
final使用:
* final域:域不能被修改
* final方法:方法不能被覆盖
* final类:类不能被扩展(即不能被继承)
*: 类中的所有方法自动成为final
*: 类中的域并不为final
=== 强制类型转换 ===
对象的强制类型转换:
# 只能在继承层次内进行类型转换;
# 在将父类转换为子类之前,应该用'''instanceof'''检查
#* “instanceof”用于判断对象是否为某个类型
=== 抽象类 ===
* 包含一个或多个抽象方法的类,必须被声明为抽象类;
* 除了抽象方法,抽象类还可以包含具体数据和具体方法;
* 抽象类不能被实例化;
* 可以定义抽象类对象,该对象只能引用非抽象子类的对象;
=== 受保护访问 ===
# public:公有,对其他类可见
# private:私有,对其他类不可见(即使子类也不可见)
# protect:受保护,对所有子类 及同一个包中的其他类可见,包外不可见
* 对本包可见是默认的,不需要修饰符;


== Object:所有类的超类 ==
== Object:所有类的超类 ==

2020年10月16日 (五) 21:59的版本


类、超类和子类

定义子类

关键字 extends 表示正在构造的新类(subclass子类;derived class派生类;child class孩子类)派生于一个已存在的类(superclass超类、base class基类、parent class父类)

覆盖方法

父类中的某些方法对子类并不一定适应,需要子类对方法覆盖(override);

  • 子类不能之间访问父类的私有域,必须使用父类私有域对应的公有访问接口;
  • 子类可以增加域、增加方法、覆盖方法,但不能删除继承的域和方法;
  • 覆盖一个方法的时候,子类方法不能低于超类方法的可见性;

“super”关键字用于只是编译器调用父类方法。

  • super与this不同,并非一个对象的引用,不能将super赋给另一个对象变量;

子类构造器

子类构造器中:

  • 如果使用super显示调用父类构造器,则该语句必须是子类构造器的第一条语句出现;
  • 如果没有显示调用父类构造器,则将自动地调用父类默认(没有参数)的构造器;
  • 如果没有显示调用父类构造器,且父类没有无参构造器,则Java编译器将报告错误;

多态

有一个用来判断是否应该设计为继承关系的规则:“is-a”,即“置换法则”,程序中出现超类对象的任何地方都可以用子类对象置换

  • 一个对象可以指示多种实际类型的现象,被称为多态(polymorphism);
    如,Employee既可以引用一个Employee对象,也可以引用Employee的子类对象(如,Manager)
  • 在运行时能自动地选择调用哪个方法的现象,被称为动态绑定(dynamic binding);
  • 如果方法是private方法、static方法、final方法,那么编译器可以准确地知道应该调用的方法,这种调用方式被称为静态调用(static bingding);

阻止继承:final类和方法

final使用:

  • final域:域不能被修改
  • final方法:方法不能被覆盖
  • final类:类不能被扩展(即不能被继承)
    类中的所有方法自动成为final
    类中的域并不为final

强制类型转换

对象的强制类型转换:

  1. 只能在继承层次内进行类型转换;
  2. 在将父类转换为子类之前,应该用instanceof检查
    • “instanceof”用于判断对象是否为某个类型

抽象类

  • 包含一个或多个抽象方法的类,必须被声明为抽象类;
  • 除了抽象方法,抽象类还可以包含具体数据和具体方法;
  • 抽象类不能被实例化;
  • 可以定义抽象类对象,该对象只能引用非抽象子类的对象;

受保护访问

  1. public:公有,对其他类可见
  2. private:私有,对其他类不可见(即使子类也不可见)
  3. protect:受保护,对所有子类 及同一个包中的其他类可见,包外不可见
  • 对本包可见是默认的,不需要修饰符;

Object:所有类的超类

泛型数组列表

对象包装器与自动装箱

参数数量可变的方法

枚举类

反射

继承的设计技巧