面向对象:继承、重写和多态

7.25学习心得

1. 包 package (必须写在文件开头,类似于C++/C#中的头文件)

  • 命名规则:域名反过来写;全用小写字母,避免使用与系统发生冲突的名字

  • 将一组功能相同的类放在同一个package中。

2. import (相当于C++/C#中的using)

  • 导入类: import pkg.subpkg.className
    import pkg.sunpkg.*(*只能表示类名,不能表示包名) 查找所有类

  • 同一个类中出现多个相同的类名处理:
    -java.util.Date 和 -java.sql.Date

  • java.lang子包下所有类默认导入。 —toString方法

3. 修饰符

面向对象:继承、重写和多态

4. 多个构造方法是以重载的形式存在的。

5. 继承 (extends)

  • java.lang.Object是所有类的父类。

  • Java中都是单继承,多继承是以一条链的单继承形式实现的,后面会学到接口(相当于C++中的抽象类)。

  • C++中多继承是通过虚基类实现的。

  • Java中如果多继承会导致重名方法的冲突。

  • 子类对象在实例化之前必须首先调用父类中的构造方法之后再调用自身的构造方法。

  • 子类不能直接访问父类的私有成员,可以调用父类中的非私有方法来访问。

6. 覆写 @Override(一同两小一大)

面向对象:继承、重写和多态

静态方法不能被覆写。

7. this和super关键字

  • 谁调用,this就指谁。
    调用被覆盖的父类方法:super.方法名(实参)
    注意:使用super()和this()在同一个构造方法中是不可能同时显示出现的!

8. 多态

  • 当一个引用类型的变量若声明为父类的类型,但实际上引用的是子类的对象(多态情况):
    (1)此时该变量不能再访问子类中自己特有的字段和方法;
    (2)若子类覆写了父类的方法,那么此时通过变量访问到的方法,实际上是子类的方法;

  • 当一个引用类型的变量若声明为父类的类型,但实际上引用的是子类的对象(多态情况):此时该变量不能再访问子类中自己特有的字段和方法;

  • 若子类覆写了父类的方法,那么此时通过变量访问到的方法,实际上是子类的方法;

  • 重载是编译时多态,重写是运行时多态。

9. 继承与组合的区别:继承的耦合性太高,组合的耦合性低(java 强调编码的低耦合性)

10. 自动装箱和自动拆箱

  • 自动装箱:可把一个基本类型变量直接赋给对应的包装类对象或则Object对象
  • 自动拆箱:允许把包装类对象直接赋给对应的基本数据类型

  • 把基本数据类型 → 包装类:
    通过对应包装类的构造方法实现
    除了Character外,其他包装类都可以传入一个字符串参数构建包装类对象。

  • 包装类 → 基本数据类型:
    包装类的实例方法xxxValue(); // xxx表示包装类对应的基本数据类型