JAVA - 学习记录第七天

目录

一、继承

(一)instanceof 运算(掌握)

(二)方法的重写 overrid(掌握)

(三)final 关键字(掌握)

(四)继承和组合(理解)

二、Object 类

(一)基本特性(掌握)

(二)toString 方法(掌握)

(三)==和 equals 方法(理解)

(四)super 关键字(掌握)

(五)继承树的追溯(掌握)

三、封装(encapsulation)

四、多态(polymorphism)(掌握)

(一)多态的概念和实现

(二)对象的转型(casting)


一、继承

继承是面向对象编程的三大特征之一,它让我们更加容易实现对于已有类的扩展、更加 容易实现对于现实世界的建模。 继承有两个主要作用:

  1. 代码复用,更加容易实现类的扩展
  2. 方便建模

(一)instanceof 运算(掌握)

instanceof 是二元运算符,左边是对象,右边是类;当对象是右面类或子类所创建对 象时,返回 true;否则,返回 false。

继承使用要点:

  1. 父类也称作超类、基类。子类:派生类等。
  2. Java 中只有单继承,没有像 C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。
  3. Java 中类没有多继承,接口有多继承。
  4. 子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)。
  5. 如果定义一个类时,没有调用 extends,则它的父类是:java.lang.Object。

(二)方法的重写 overrid(掌握)

子类通过重写父类的方法,可以用自身的行为替换父类的行为。方法的重写是实现多态 的必要条件。方法的重写需要符合下面的三个要点:

  1. “= =”: 方法名、形参列表相同。
  2. “≤”:返回值类型和声明异常类型,子类小于等于父类。
  3. “≥”: 访问权限,子类大于等于父类。

(三)final 关键字(掌握)

inal 关键字的作用:

  1. 修饰变量: 被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。 final int MAX_SPEED = 120;
  2. 修饰方法:该方法不可被子类重写。但是可以被重载! final void study(){}
  3. 修饰类: 修饰的类不能被继承。比如:Math、String 等。 final class A {}

(四)继承和组合(理解)

        “组合”的核心就是“将父类对象作为子类的属性”,然后,“子类通过调用这个属性 来获得父类的属性和方法”。组合比较灵活。继承只能有一个父类,但是组合可以有多个属性。

二、Object 类

(一)基本特性(掌握)

        Object 类是所有 Java 类的根基类,也就意味着所有的 Java 对象都拥有 Object 类的属 性和方法。如果在类的声明中未使用 extends 关键字指明其父类,则默认继承 Object 类。

(二)toString 方法(掌握)

        Object 类中定义有 public String toString()方法,其返回值是 String 类型。Object 类中toString 方法的源码为:

public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());

}

        根据如上源码得知,默认会返回“类名+@+16 进制的 hashcode”。在打印输出或者用字符串连接对象时,会自动调用该对象的 toString()方法。

(三)==和 equals 方法(理解)

  • “==”代表比较双方是否相同。如果是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个对象。
  • Object 类中定义有:public boolean equals(Object obj)方法,提供定义“对象内容相等”的逻辑。比如,我们在公安系统中认为 id 相同的人就是同一个人、学籍系统中认为学号相同的人就是同一个人。
  • Object 的 equals 方法默认就是比较两个对象的 hashcode,是同一个对象的引用时返回 true 否则返回 false。但是,我们可以根据我们自己的要求重写 equals 方法。

(四)super 关键字(掌握)

  • super“可以看做”是直接父类对象的引用。可以通过 super 来访问父类中被子类覆盖 的方法或属性。
  • 使用 super 调用普通方法,语句没有位置限制,可以在子类中随便调用。
  • 在一个类中,若是构造方法的第一行代码没有显式的调用 super(...)或者 this(...);那么 Java 默认都会调用 super(),含义是调用父类的无参数构造方法。这里的 super()可以省略。

(五)继承树的追溯(掌握)

属性/方法查找顺序:(比如:查找变量 h)

  • 查找当前类中有没有属性 h
  • 依次上溯每个父类,查看每个父类中是否有 h,直到 Object
  • 如果没找到,则出现编译错误。
  • 上面步骤,只要找到 h 变量,则这个过程终止。

构造方法调用顺序: 构造方法第一句总是:super(…)来调用父类对应的构造方法。所以,流程就是:先向上 追溯到 Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。

注:静态初始化块调用顺序,与构造方法调用顺序一样,不再重复。

三、封装(encapsulation)

编程中封装的具体优点:

  • 提高代码的安全性。
  • 提高代码的复用性。
  • “高内聚”:封装细节,便于修改内部代码,提高可维护性。
  • “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作

访问权限修饰符:

使用细节: 

四、多态(polymorphism)(掌握)

(一)多态的概念和实现

多态的主要优势是提高了代码的可扩展性,符合开闭原则。但是多态也有弊端,就是无法调用子类特有的功能,比如,我不能使用父类的引用变量调用 Dog 类特有的 seeDoor()方法.

(二)对象的转型(casting)

父类引用指向子类对象,我们称这个过程为向上转型,属于自动类型转换。 向上转型后的父类引用变量只能调用它编译类型的方法,不能调用它运行时类型的方 法。这时,我们就需要进行类型的强制转换,我们称之为向下转型!

在向下转型过程中,必须将引用变量转成真实的子类类型(运行时类型)否则会出现类 型转换异常 ClassCastException。为了避免出现这种异常,我们可以使用 instanceof 运算符进行判断.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值