Java入门第57课——继承

喜欢ヅ旅行 2022-01-27 05:51 351阅读 0赞

1.1 继承

1.1.1 泛化的过程

image.png

1.1.2 extends关键字

· 通过extends关键字可以实现类的继承

· 子类(Sub class)可以继承(Super class)的成员变量及成员方法,同时也可以定义自己的成员变量和成员方法;

· Java语言不支持多重继承,一个类只能继承一个父类,但一个父类可以有多个子类

extends关键字(续1)

  1. public class Tetromino{
  2. Cell[] cells;
  3. public Tetromino(){
  4. cells=new Cell[4];
  5. }
  6. public void drop(){...}
  7. public void moveLeft(){...}
  8. public void moveRight(){...}
  9. public void print(){...}
  10. }

extends关键字(续2)

  1. public class TetrominoT extends Tetromino{
  2. public TetrominoT(int row,int col){
  3. cells[0]=new Cell(row,col);
  4. cells[1]=new Cell(row,col+1);
  5. cells[2]=new Cell(row,col+2);
  6. cells[3]=new Cell(row+1,col+1);
  7. }
  8. }

通过继承,TetrominoT拥有Cell[] cells成员以及drop、moveLeft、moveRight等方法。

1.1.3 继承中构造方法

· 子类的构造方法中必须通过super关键字调用父类的构造方法,这样可以妥善的初始化继承自父类的成员变量。

· 如果子类的构造方法中没有调用父类的构造方法,Java编译器会自动的加入对父类无参构造方法的调用(如果该父类没有无参的构造方法,会有编译错误)。

  1. public TetrominoT(int row,int col){
  2. super();//编译器自动加入
  3. cells[0]=new Cell(row,col);
  4. cells[1]=new Cell(row,col+1);
  5. ......
  6. }//super关键字必须位于子类构造方法的第一行

继承中构造方法(续1)

image.png

1.1.4 父类的引用指向子类的对象

· 一个子类的对象可以向上造型为父类的类型。即,定义父类型的引用可以指向子类的对象。

image.png

父类的引用指向子类的对象(续1)

· 父类的引用可以指向子类的对象,但通过父类的引用只能访问父类所定义的成员,不能访问子类扩展的部分。

image.png

1.2 重写

1.2.1 方法的重写

· 子类可以重写(覆盖)继承自父类的方法,即方法名和参数列表与父类的方法相同;但方法的实现不同。

· 当子类对象的重写方法被调用时(无论是通过子类的引用调用还是通过父类的引用调用),运行的是子类的重写后的版本。

方法的重写(续1)

image.png

1.2.2 重写中使用super关键字

· 子类在重写父类的方法时,可以通过super关键字调用父类的版本

image.png

1.2.3 重写和重载的区别

· 重载与重写是完全不同的语法现象,区别如下:

- 重载是指在一个类中定义多个方法名相同但参数列表不同的方法,在编译时,根据参数的个数和类型来决定绑定哪个方法。

- 重写是指在子类中定义和父类完全相同的方法,在程序运行时,根据对象的类型不同(而不是引用类型)而调用不同的版本。

重写和重载的区别(续1)

image.png

重写和重载的区别(续2)

· 重载遵循所谓”编译器绑定”,即在编译时根据参数变量的类型判断应该调用哪个方法;因为:变量obj的类型为Super,因此:Goo的g(Super)方法被调用。

· 重写遵循所谓”运行期绑定”,即在运行的时候根据引用变量指向的实际对象类型调用方法;因为:obj实际指向的是子类的对象,因此:子类重写后的f方法被调用。

博主点评:

将相同的行为和方法抽出来定义为一个父类,子类继承后,可以用父类中的方法和成员变量,不用再写。

本节课所列举的方法的重载例子是笔试必考题。

扫码关注我吧:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hvdWp1bmthbmczNjM_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 0 条评论,351人围观)

还没有评论,来说两句吧...

相关阅读