文档介绍:第11章面向对象的Java实现 -------继承和多态
回顾
在Java程序中,代码封装带给我们的好处是什么?
Java中的构造方法与实例方法,有什么区别?
Java中如果有了显示的构造方法隐式的还会存在么?
/
学习目标
掌握继承
掌握super关键字
掌握多态
/
生活中的继承 2-1
生活中,继承的例子随处可见
/
动物
食草动物
食肉动物
谁是父类?
谁是子类?
能说出继承的特点吗?
继承需要符合的关系:is-a,父类更通用、子类更具体
生活中的继承 2-2
子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性
/
巴士是汽车吗?
卡车是汽车吗?
出租车是汽车吗?
最大载客数量
报站
引擎数量
外观颜色
刹车
加速
汽车
最大载重量
卸货
所属公司
最大载客数量
打发票
属性
行为
请问:出租车包含哪些属性和行为呢?
为什么需要继承
在做开发时,经常会遇到这样的问题:
要开发学校管理系统,其中的对象有教师类和学生类,各自的要求如下:
教师类
属性:姓名、性别、年龄、教授课程
方法:自我介绍、授课
学生类
属性:学号、姓名、性别、年龄
方法:自我介绍、学习
为什么需要继承
问题:下面代码中存在什么问题?
public class Teacher {
//属性
String name;
char sex;
int age;
String lesson;
//构造方法
//省略方法
//方法
public void introduction(){
.println("大家好,我叫"+name
+","+sex+",今年"+age+"岁!");
}
public void teach(){
(name+"正在讲课...");
}
}
public class Student {
//属性
String no;
String name;
char sex;
int age;
//构造方法
//省略
//方法
public void introduction(){
.println("大家好,我叫"+name
+","+sex+",今年"+age+"岁!");
}
public void study(){
(name+"正在学习...");
}
}
(︶︿︶)真麻烦!
为什么需要继承 4-3
如何改进?有没有可能建立继承关系,让子类自动继承父类的属性和方法?
/
现在,所有子类中相同的代码都抽取到父类中了
人
教师
学生
姓名
性别
年龄
自我介绍
属性
行为
教授课程
授课
学号
学习
如何实现继承?
继承是指从一个基类出发定义另一个新类即派生类的过程。派生类自动具有基类的所有非私有的实例变量(数据成员)和实现方法,而且派生类还可以增加新的成员变量和方法。
父类:超类(super class),又叫基类(based class);
子类:subclass,又叫派生类或导出类(derived class)
JAVA中用extends关键字实现继承。
语法如下:
例如:
public class 子类名 extends 父类名
{
//类体
}
public class Student extends Person
{
//类体
}
如何实现继承?
父类中只定义一些通用的属性和方法。
子类自动继承父类中的属性和方法,还可以定义自己特有的属性和方法。
public class Person {
//属性
String name;
char sex;
int age;
//构造方法
public Person(String name,char sex,int age){
=name;
=sex;
=age;
}
//方法
public void introduction(){
.println("大家好,我叫"+name+","
+sex+",今年"+age+"岁!");
}
}
public class Teacher extends Person{
//属性
String lesson;
//构造方法
public Teacher(String name,char sex,int age,String lesson){
super(name,sex,age);
=lesson;
}
//方法