继承性和多态性.ppt
《继承性和多态性.ppt》由会员分享,可在线阅读,更多相关《继承性和多态性.ppt(25页珍藏版)》请在三一文库上搜索。
1、第4章 继承性和多态性,继承性和多态性,2,主要内容,4.1 继承性 派生类的定义 super关键字 protected和final关键字 4.2 多态性 4.3 抽象类和接口 抽象类 接口 4.4 初始化块,继承性和多态性,3,4.1 继承性,类具有继承性,子类对父类的继承关系体现了特殊和 一般的关系。通过继承可以更有效地组织程序结构, 明确类间关系,并充分利用已有的类来完成更复杂、 深入的开发。 Java中的所有类都是java.lang.Object类的子类。 4.1.1 派生类的定义 Java语言中派生类的定义格式如下:,class extends ,继承性和多态性,4,继承性,示例:参
2、看例4.1 / Cylinder1.java public class Cylinder1 extends Circle private double length = 1; / 新增的数据成员 public double getLength() return length; public void setLength(double length) this.length = length; public double findVolume() / 返回圆柱体的体积 return findArea() * length; / findArea()是从基类Circle继承下来的方法 public
3、 String toString() / 覆盖Object类中的toString()方法 return (“圆柱体的高为:“ + getLength() + “ 圆柱体的半径为:“ + super.getRadius(); / TestCylinder1.java public class TestCylinder1 public static void main(Stringargs) Cylinder1 cylinder1 = new Cylinder1(); System.out.println(cylinder1.toString(); System.out.println(“圆柱体的
4、体积为:“ + cylinder1.findVolume(); ,继承性和多态性,5,4.1.2 super关键字,1. 数据成员的隐藏 数据成员的隐藏是指在子类中重新定义一个与父类中已定义的数据成员名完全相同的数据成员,即子类拥有了两个相同名字的数据成员,一个是继承父类的,另一个是自己定义的。 当子类引用这个通明的数据成员时,默认操作时他自己定义的数据成员,父类那里继承来的数据成员被隐藏。 当子类要操作继承自父类的同名数据成员时,可使用关键字super引导。,继承性和多态性,6,super关键字,2. 成员方法的覆盖 子类可以重新定义与父类格式完全相同(包括方法名、方法形参的个数和类型、方法
5、返回值的类型)的成员方法,实现对父类方法的覆盖。 只有当实例方法能被访问时,才能进行方法覆盖。私有方法不能被覆盖. 静态方法(类方法)能被继承,但不能被覆盖。 子类在重新定义父类已有的方法时,应保持与父类完全相同的方法名、返回值类型和参数列表,否则就不是方法的覆盖,而是子类定义自己特有的方法,与父类的方法无关。,继承性和多态性,7,super关键字,3. super关键字 super表示的是当前对象的直接父类对象,是当前对象的直接父类对象的引用。 super的使用方法有三种: (1) 访问直接父类隐藏的数据成员,其使用形式如下: super.数据成员 (2) 调用直接父类中被覆盖的成员方法,其
6、使用形式如下: super.成员方法(参数) (3) 调用直接父类的构造方法,其使用形式如下: super(参数),继承性和多态性,8,super关键字,示例:参看例4.2 public class Cylinder2 extends Circle private double length; public Cylinder2() super(); length = 1.0; public Cylinder2(double radius, double length) super(radius); / 调用父类的构造方法 this.length = length; public double
7、getLength() return length; public void setLength(double length) this.length = length; public double findArea() / 覆盖父类的方法,求圆柱体的表面积 return 2 * super.findArea() + 2 * getRadius() * Math.PI * length; public double findVolume() return super.findArea() * length; / 此处的super不能省略 public String toString() / 覆
8、盖Object类的toString()方法 return “圆柱体的高度为: “ + length + “ 半径为: “ + getRadius(); / TestCylinder2.java public class TestCylinder2 public static void main(Stringargs) Cylinder2 cylinder2 = new Cylinder2(2,4); System.out.println(cylinder2.toString(); System.out.println(“圆柱体的表面积为:“ + cylinder2.findArea(); Sy
9、stem.out.println(“圆柱体的体积为:“ + cylinder2.findVolume(); ,继承性和多态性,9,4.1.3 protected和final关键字,1. protected关键字 用protected修饰的成员变量可以被三种类所引: 该类自身 与它在同一个包中的其它类及在 其它包中的该类的子类 2. final关键字 使用final关键字可以定义常量。 定义类时,在class关键字前加关键字final,表示此类是最终类,不能被其它类继承,不能做父类。 用final修饰成员方法,表示此方法不能被它的子类覆盖。 3. native关键字(略) native修饰的方法
10、称为本地方法,此方法使用的目的是为了将其它语言(例如,C、C+、FORTRAN、汇编等)嵌入到Java语言中。这样可以充分利用已经存在的其它语言的程序功能模块,避免重复编程。,继承性和多态性,10,4.2 多态性,多态是面向对象程序设计语言的一个重要特性,在Java中,可以在同一类或不同类中定义名称相同但是操作不同的多个方法,多态性指的是运行时判断应该执行哪个方法代码的能力,这种能力也叫动态绑定。 在Java语言中,多态性分为编译时多态性和运行时多态性。 编译时的多态性是通过方法重载实现的,Java虚拟机根据传递给方法的参数个数和类型决定调用哪个重载方法。 运行时的多态性是Java多态性的最重
11、要的体现,在Java语言的继承关系中,子类对象与父类对象之间有一个重要特性:在任何需要父类对象的地方,都可以使用子类对象来代替,即子类对象可以作为父类对象来使用。一个对象可以通过引用子类的实例来调用子类的方法,通常,方法在父类中定义,在子类中覆盖,子类中调用哪个方法是在运行时决定的,取决于对象的类型,称为运行时的多态性。,【JAVA最重要的特性】,继承性和多态性,11,多态性,/ ManagerTest.java 多态性应用举例 import java.util.*; public class ManagerTest public static void main(String args) M
12、anager boss = new Manager(“王明“, 8000); / 创建一个经理并设置他的奖金 boss.setBonus(500); Employee staff = new Employee3; / 建立员工数组和经理一起填充 staff0 = boss; / 子类对象赋给父类对象 staff1 = new Employee(“张鹏“, 5000); staff2 = new Employee(“李丽“, 6000); for (int i = 0; i staff.length; i+) / 打印所有员工信息 Employee e = staffi; System.out.
13、println(“name=“ + e.getName() + “,salary=“ + e.getSalary(); class Employee public Employee(String n, double s) name = n; salary = s; public String getName() return name; public double getSalary() return salary; private String name; private double salary; ,class Manager extends Employee public Manage
14、r(String n, double s) super(n, s); bonus = 0; public double getSalary() double baseSalary = super.getSalary(); return baseSalary + bonus; public void setBonus(double b) bonus = b; private double bonus; ,继承性和多态性,12,4.3 抽象类和接口,抽象类体现数据抽象的思想,是实现程序多态性的一种手段。 接口则是Java中实现多重继承的唯一途径。 4.3.1 抽象类 抽象类的作用在于将许多有关的类
15、组织在一起,提供一个公共的类,即抽象类,而那些被它组织在一起的具体的类做为它的子类由它派生出来。 定义一个抽象类的格式如下: abstract class abstractClass /* 类定义体 */ 抽象方法是指在返回值类型前加上abstract关键字,且没有方法体。格式如下: abstract(); 示例:参看例4.4,继承性和多态性,13,抽象类,/ GeometricObject.java 抽象类几何图形类的定义 abstract class GeometricObject public abstract double findArea(); / 抽象方法 public abstr
16、act double findPerimeter(); / 抽象方法 / Circle.java 定义抽象类的派生类Circle类 class Circle extends GeometricObject private double radius=1.0; public double findArea() / 具体类实现父类的所有抽象方法 return radius * radius * Math.PI; public double findPerimeter() / 具体类实现父类的所有抽象方法 return 2 * radius * Math.PI; / Rectangle.java 定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 继承 多态性
链接地址:https://www.31doc.com/p-2631894.html