Java查漏补缺4

  • 子类继承父类中的成员的具体原则
  • 子类的继承性
  • 子类和父类在同一包中的继承性
  • 子类和父类不在同一包中的继承性
  • protected
  • 无名包
  • 构造方法调用顺序
  • 类一般总是有无参构造函数
  • super关键字


Java只支持单继承(一个父类);也支持 多重继承;一个类可以被多个类继承(可以拥有多个子类)此处多重继承是指只能有多个子类、不能有多个父类。
子类会自动继承父类的方法和变量,但不继承构造方法。在子类中可以调用父类的方法和访问父类的变量(通过关键字super)。

子类继承父类中的成员的具体原则

能够继承父类的public和protected成员;不能继承父类的private成员;
父类的包访问权限成员,如果子类和父类在同一包,则子类能够继承;否则,子类不能够继承;

子类的继承性

子类和父类在同一包中的继承性

子类继承父类中不是private(public、protected、包访问)的成员变量和方法,访问权限保持不变。

子类和父类不在同一包中的继承性

子类继承父类的protected、public 成员变量和方法,继承的成员或方法的访问权限保持不变。(protected在子类内部可访问)

protected

  1. 对于子类中声明的protected成员变量和方法,同一包中的其他类可访问;
  2. 子类中的protected成员变量和方法是继承自父类,子类内部可访问、与父类在同一包中的其它类中也可访问

无名包

缺省无名包应该是classpath所指向的目录。有包名的类不能访问缺省无名包中的非公有的类。

构造方法调用顺序

子类的构造方法总是先调用父类的某个构造方法(未指定,则调用默认的无参构造方法), 一直到Object类为止

类一般总是有无参构造函数

调用父类的构造方法,并不会创建父类对象,只是对子类对象继承自父类的成员进行初始化。
子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用。
当子类覆盖父类的成员变量时,父类方法使用的是父类的成员变量,子类方法使用的是子类的成员变量。

super关键字

子类可以隐藏从父类继承的成员变量和方法。
在子类中想使用被子类隐藏的成员变量或方法可使用关键字super。
子类不继承父类的构造方法,子类可使用父类的构造方法。