第七章继承和多态优秀课件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

小结
❖ 阅读代码,说出运行结果
class Car {
载客量是4人
private int site = 4; //座位数
载客量是20人
Car(){
System.out.println ("载客量是"+site+"人);
} public void setSite(int site){
this.site = site; } void print(){
其子类; ▪ 重写方法的不能缩小被重写方法的访问权限。
方法重写
❖ 构造方法能被重写吗?
不能被继承因此不能重写
❖ 如何在子类中调用父类的构造方法?
可以被默 认添加
super(); super(参数表);
只能是构造方法 的第一条语句
方法修饰符
方法修饰符
static
final
abstract
static修饰符
使用final类
public final class Penguin extends Pet {
//… }
最终版的类
方法不希望被重写?
使用final方法 public final void print () {
//…
}
最终版的方法
属性值不希望被修改?
使用final方法
public class Penguin {
final String home ="南极";// 居住地
public void setHome(String name){
this.home=home; //错误,home不可以再次赋值
}
}
最终版的属性值
abstract修饰符
❖ 由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类 ❖ 抽象方法必须声明在抽象类中 ❖ 抽象方法语法:
将重复代码 抽取到父类 中
使用继承优化设计
w 使用继承优化后:
方便修改 代码
继承的好处
减少代码量
子类与父类是is-a关系
如何使用继承
❖ 使用继承
▪ 编写父类
class Pet { //公共的属性和方法
}
▪ 编写子类,继承父类
class Dog extends Pet { //子类特有的属性和方法
▪ abstract type method_name(parameter_list); ❖ 声明抽象类语法:
第七章继承和多态
❖ 构造方法 ❖ 方法重载 ❖ 封装与访问权限控制
内容回顾
❖ 继承与方法重写 ❖ 多态 ❖ 抽象类与抽象方法 ❖ instanceof运算符与类型转换
本讲内容
❖ 掌握继承的概念及用法。 ❖ 掌握多态的概念及用法 ❖ 掌握抽象类的使用
本讲目标
为什么使用继承?
❖ 这两个类图有什么问题?
❖ static修饰符修饰的方法叫静态方法 ❖ 目的:使该方法独立于类的实例,使用类去访
问,而不是类实例,所以也叫类方法
规则
可以调用其他静态方法
必须访问静态数据
不能使用 super 或 this 关键字
final修饰符
final
不能修改变量
类不能被继承
子类不能重写方法
final用法
Penguin类不希望再被其他类继承?
System.out.print("载客量是"+site+"人");
class Bus extends Car { Bus(int site){ setSite(site); }
}
}
}
public static void main(String[] args) {
Bus bus = new Bus(20);
Dog
- name:String - health:int - love:int - strain:String
+ print():void + getName():String + getHealth ():int + getLove():int + getStrain:String + Dog()
注: 没有extends,默认父类为Object,是最高层类。 只能有一个父类,即单继承
❖ 子类访问父类成员
使用super关键字 ▪ 访问父类属性
super代表 super.name; 父类对象
▪ 访问父类方法
super.print();
理解继承
理解继承
❖ 子类继承了父类的属性和方法 ❖ 但有些父类成员不能继承:
bus.print();
}
方法重写
❖ 子类中有和父类相同签名的方法,会如何?
子类重写父类方法
方法重写
❖ 子类可以定义与父类同名的变量,实现对父类变量 的隐藏
❖ 子类可以定义与父类同名的方法,实现对父类方法 的覆盖,即方法重写
❖ 方法重写的条件:
▪ 必须具有相同的方法名; ▪ 必须具有相同的参数列表; ▪ 重写方法的返回值类型必须和被重写方法的返回值类型相同或者是
▪ private成员 ▪ 子类与父类不在同包,使用默认访问权限的成员 ▪ 构造方法
继承的特点
❖ 通过继承可以简化类的定义,实现代码的重用 ❖ Java只支持单继承,不允许多重继承。 ❖ 可以有多层继承;类B继承类A;类C继承类B; ❖ 子类继承父类的成员变量和成员方法,但不继承父类的构造方法 ❖ 在子类的构造方法中可用super(参数列表)调用父类的构造方法。 ❖ 如果子类的构造方法中没有显式的调用父类构造方法,也没有使用
Penguin
- name:String - health:int - love:int - sex:String
+ print():void + getName():String + getHealth ():int + getLove():int + getSex():String + Penguin()
}
只能继承一个父类
class Penguin extends Pet {
}
继承关键字
继承的实现
❖ extends关键字用于继承类。 ❖ 声明一个继承父类的类的通常形式如下:
class subclass-name extends superclass-name { //类体
} 例:class Student extends Person { … }
this关键字调用自己的其他构造方法,那么在产生子类实例对象时 JVM自动调用父类无参数的构造方法。
来自百度文库
何时使用继承
何时使用继承?
继承与真实世界类似
只要说“猫是哺乳动物”,猫的很多属性、行为 就不言自明了
藏獒是一种狗
符合is-a关系的设计使用继承
继承是代码重用的一种方式
将子类都有的属性和行为放到父类中
相关文档
最新文档