Java
继承
例子:请确认各类之间的关系
plane
military plane( 军事)
passenger plane ( 客机)
cargo plane ( 货物)
fighter plane ( 战斗机)
Airliner ( 民用机)
Plane
Military plane Airliner
Fighter plane
Cargo plane Passenger plane
Executive jet
Public class Employee
{
String name;
Date hireDate;
Date dateofBirth;
String jobTitle
int grade;
public String getDetails()
}
Public class Manager
{
String name;
Date hireDate;
Date dateofBirth;
String jobTitle
int grade;
String Department;
public String getDetails()
public void Guide()
}
Continue
Public class manager extends employee
{
String department;
public void Guide()
}
关键字 extends 是解决继承问题的继承
类之间的继承关系是面向对象程序设计语言的基本特征
一个类(子类)是另一个类(父类)的特例。父类是被继承的,子类是继承的
一般性(父类)和特殊性(子类)
Continue
新类继承一般类的状态和行为,并根据需要增加自己的状态和行为。
由继承而得到的类称为子类 (sub class),被继承的类称为父类 (super class)。
父类可以是自己编写的类,也可以 JAVA类库中的类。
利用继承可以有效使用代码的重复使用。
JAVA不支持多重继承,即子类只能有一个父类。
继承的定义
子类的成员有一部分是子类自己声明定义的。
另一部分是从它的父类继承的。
子类继承父类的成员变量作为自己的一个成员变量。
继承父类的方法作为自己的方法。
CONTINUE
使用关键字 extends来声明一个类是另一个类的子类。
格式如下:
class 子类名 extends 父类名
例如:
class students extends People
{
}
例子,Son是 Father的子类,而 GrandSon是 Son的子类子类和父类不在同一包中
上面的例子,前提是在同一包中。
假如不在同一包中,那么子类只继承父类的 public,public 成员。 default 成员不能被继承。
子类可以调用继承的方法来操作未被继承的变量。
x 尽管是不被 B继承的,但是 B仍旧可以通过继承方法 f()来操作 x.
成员变量隐藏
当子类中定义的成员变量只要和父类中的成员变量同名时,子类就隐藏了继承的成员变量。
方法重写(成员方法隐藏)
子类可以隐藏已继承的方法,子类通过方法重写来隐藏继承的方法。
方法重写:定义一个方法,并且这个方法的名字、返回类型、参数个数和类型与从父类继承的方法完全相同。
子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。
子类继承父类的 speak()方法和 cry()方法,但子类通过重写 speak()隐藏了继承的 speak()方法。
Super关键字
super有两种用法:一种是子类使用 super调用父类的构造方法,另一种是子类使用 super调用被子类隐藏的成员变量和方法。
子类不继承父类的构造方法,因此子类如果想使用父类的构造方法,必须在子类的构造方法中使用关键字 super来表示。而且 super必须是子类构造方法中的第一条语句 。
子类在创建对象时,子类的构造方法总是先调用父类的某个构造方法。
CONTINUE
如果子类的构造方法没有明显指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。
因此如果在子类的构造方法中,没有使用关键字 super调用父类的某个构造方法,
那么默认有,super ( ),即调用父类的不带参数的构造方法。
Super操作被隐藏的成员
如果子类和父类的成员变量同名时,子类就隐藏了从父类继承的成员变量。当子类定义一个方法,并且这个方法的名字、返回类型,参数个数和类型与父类的某个方法完全相同是,子类从父类继承的这个方法将隐藏。
我们要调用父类隐藏的成员,我们可以使用
super:
super.成员变量;
super.成员方法;
Which one is added to the line 8,and the program will
be not compiled successfully?
A.public float getNum{return 4.0f}
B.public void getNum(){}
C.public void getNum(double d){}
D.public void getNum(float d){return 4.0d;}
习题
Result?
Resutl?