第四章 继承与多态)ppt课件.pptx
《第四章 继承与多态)ppt课件.pptx》由会员分享,可在线阅读,更多相关《第四章 继承与多态)ppt课件.pptx(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章 继承与多态)中国铁道出版社Java程序设计Java程序设计第四章 继承与多态继 承 4.1关于 super 关键字4.2方法的重写和重载的比较4.3目录CONTENTE多 态 4.4protected 数据和方法4.5阻止扩展和重写4.6Java程序设计第四章 继承与多态知识目标【知识目标】1. 了解 Java 程序中继承的定义;2. 掌握子类中重写方法的使用;3. 理解 Java 的多态性。Java程序设计第四章 继承与多态教学重难点【能力目标】1. 掌握通过继承定义子类的方法;2. 掌握访问权限的使用Java程序设计第四章 继承与多态继 承4.1Java程序设计Java程序设计第四
2、章 继承与多态继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如定义“学生”“教师”“工人”“职员”等类,从事不同职业的类有姓名、性别、工龄等共同特性,设计这些类来避免冗余并使得系统更易于理解和易于维护的最好方式就是继承。Java程序设计第四章 继承与多态1. 父类和子类继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。若类 B 继承类 A,则属于 B 的对象便具有类 A 的全部或部分性质(数据属性)和功能(操作)
3、,称被继承的类 A 为基类、父类或超类,而称继承类B 为 A 的派生类或子类。extends 关键字用于继承类。声明一个继承父类的类的通常形式如下:class subclass-name extends superclass-name /类体在 Java 语言中,java.lang.Object 类是所有类最根本的基类(又称父类、超类),如果用户新定义的类没有明确地指定继承自哪个基类,那么 Java 就会默认为它是继承自 Object 类的,如图 4-1 所示。Java 不支持多重继承,单继承使 Java 的继承关系很简单,一个类只能直接继承一个类,易于管理程序。Java程序设计第四章 继承与
4、多态【例 4-1】 假设要设计类建模学生、工人、教师等不同职业的类,这几个类有许多共同属性和行为。这样可以使用一个通用的类“Human”来建模。通过继承“Human”类来增加新的数据和方法,并且子类从父类中可以继承可访问的数据和方法。class Human String name; /姓名char sex; /性别Human()Human(String n, char s)name = n;sex = s;public String getName() return name; public char getSex() return sex;class Worker extends Human
5、 char category; /类别int workAge; /工龄Worker()Worker(String n,char s,char c,int w)name = n; sex =s; category = c; workAge = w;public char getCategory()return category;public int getWorkAge() return workAge; Java程序设计第四章 继承与多态public class InheDemo public static void main(String args) Worker laoWang= new
6、Worker(老王,M,B,40);System.out.println(工人信息);System.out.println(姓名 :+laoWang.getName();System.out.println(性别 :+laoWang.getSex();System.out.println(类别 : +laoWang.getCategory();System.out.println(工龄 :+laoWang.getWorkAge();Java程序设计第四章 继承与多态2. 继承注意事项 (1)子类继承父类的成员变量当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成
7、员变量。具体原则如下:能够继承父类的 public 和 protected 成员变量;不能够继承父类的 private 成员变量。对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承。对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用 super 关键字进行引用。(2)子类继承父类的方法同样地,子类也并不是完全继承父类的所有方法。能够继承父类的 public 和 protected 成员方法;不能够继承父类的 private 成
8、员方法。对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承。对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用 super 关键字进行引用。注意:隐藏和覆盖是不同的。隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的。下面是继承应该注意的几个关键点:Java程序设计第四章 继承与多态关于 super 关键字4.2Java程序设计Java程序设计第四章 继承与多态在 Java 中,this 通常指当前对象,super 则指父类的。
9、当要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,可以利用 this 实现这个目的,当然,this 的另一个用途是调用当前对象的另一个构造方法。如果要引用父类的某种东西,则非super 莫属。由于 this 与 super 有如此相似的一些特性,所以可以通过对比进行学习,可以更好地区分和理解。Java程序设计第四章 继承与多态1. super 的使用super 指代父类,可以调用父类中的普通方法和构造方法。super 主要有两种用法:第一种用法主要用来在子类中调用父类的同名成员变量或者方法;第二种主要用在子类的构造方法中显式地调用父类的构造方法,要注意的是,如果是用在子
10、类构造方法中,则必须是子类构造方法的第一个语句。这是显式地调用父类构造方法的唯一方式。super.成员变量/super.成员方法super(parameter1,parameter2.)子类不能够继承父类的构造方法,但是要注意的是,如果父类的构造方法都是带有参数的,则必须在子类的构造方法中显式地通过 super 关键字调用父类的构造方法并配以适当的参数列表。如果父类有无参构造方法,则在子类的构造方法中用 super 关键字调用父类构造方法不是必需的,如果没有使用 super 关键字,系统会自动调用父类的无参构造方法。Java程序设计第四章 继承与多态构造方法可以调用重载的构造方法或者父类的构造
11、方法。如果它们没有被显式地调用,编译器会自动将 super()作为构造方法的第一条语句。例如:public ClassName()/语句public ClassName()super();/语句public ClassName(double d)super();/语句public ClassName(double d)/语句等价于等价于Java程序设计第四章 继承与多态class Shape protected String name;public Shape()name =shape;public Shape(String name) this.name = name;class Circl
12、e extends Shape private double radius;public Circle() radius = 0;public Circle(double radius) this.radius = radius;public Circle(double radius,String name) this.radius = radius;this.name = name;【例 4-2】 定义形状 Shape 类,子类 Circle 类。这样的代码是没有问题的,如果把父类的无参构造方法去掉,如图 4-2 所示,则代码必然会出错Java程序设计第四章 继承与多态Java程序设计第四章
13、 继承与多态改成图 4-3 即可:因此,如果要设计一个可以被继承的类,最好提供一个无参构造方法,以便于对该类进行扩展,同时避免错误。Java程序设计第四章 继承与多态2. 构造方法链在任何情况下,构造一个类的实例时,将会调用沿着继承链的所有父类的构造方法。通俗地说就是在构造一个子类的对象时,子类构造方法会在完成自己的任务之前先调用父类的构造方法,如果父类又继承自其他类,那么父类在完成自己的任务之前也会先调用他的父类的构造方法,一直持续,直到最后一个类的构造方法被调用,这就是构造方法链。Java程序设计第四章 继承与多态定义了 3 个类:Person 类、Employee 类(继承 Person
14、 类)、Manager 类(继承Employee 类)。3 个类的类图如图 4-4 所示。图 4-4 Person类、Employee类、Manager类的继承关系图 Java程序设计第四章 继承与多态【例 4-3】 构造方法链。建立 Person 类、Employee 类、Manager 类,三个类的关系见图 4-4。class Person private String pname;/建立空参构造方法public Person()System.out.println(创建人类);public Person(String pname) /super();this.pname = pname;
15、System.out.println(getPname();public String getPname() return pname;public void setPname(String pname) this.pname = pname;建立 Person 类Java程序设计第四章 继承与多态class Employee extends Person private double salary;public Employee()/隐式地调用父类的空参构造方法System.out.println(创建员工);public Employee(String pname,double s)/显式
16、地调用父类带参构造方法Super(pname);this.salary = s;System.out.println(pname+的工资是:+getSalary();public double getSalary() return salary;public void setSalary(double salary) this.salary = salary;建立 Employee 类Java程序设计第四章 继承与多态建立 Manager 类class Manager extends Employee private double benfit;public Manager(String pn
17、ame,double s,double b) super(pname, s);this.benfit = b;System.out.println(pname+的工资是:+s+,+奖金是+getBenfit();public Manager() System.out.println(创建经理);public double getBenfit() return benfit;public void setBenfit(double benfit) this.benfit = benfit;Java程序设计第四章 继承与多态public class TestConstructorChain pub
18、lic static void main(String args) /子类的构造方法一定会隐式或显式地调用父类的构造方法Manager m = new Manager();Manager m2 = new Manager(汤姆,4000,3000);用 TestConstructorChain 类测试这 3 个类之间的联系以及怎样实现的构造方法链注意:如果在一个类中自定义了有参数的构造函数,那么这个类原先默认的无参构造方法就会被覆盖掉。(如果把 Person 类的无参构造方法去掉,那么 Employee 中无参构造方法就会报错)子类的构造方法会隐式地调用父类的无参构造方法。所以如果有子类继承这
19、个类,一旦子类中要隐式地调用父类无参构造方法时会报错,因此需要自己增加父类的无参构造函数。在 Employee 类中关于 this()和 super()的用法:this()和 super()不能同时存在,因为都要在第一行;带不带参数视具体情况而定;this()自己调用自己的构造方法,super()调用父类的空参构造方法;this(*)为自己的带参构造方法;super(*)为父类的带参构造方法。Java程序设计第四章 继承与多态方法的重写和重载的比较4.3Java程序设计Java程序设计第四章 继承与多态子类从父类中继承方法,有时需要在子类中修改父类中定义的方法的实现,这称作方法的重写(over
20、riding)。重写意味着在子类中提供一个对方法的新的实现。方法的重载意味着使用同样的名字但不同的参数列表、返回值等来定义多个方法。Java程序设计第四章 继承与多态1. 方法的重写子类继承了父类的方法,有时需要修改父类中定义的方法的实现。当子类拥有和父类相同的方法定义(即返回类型、方法名、参数列表完全相同时,仅方法体不一样),称为方法重写。对于子类创建的一个对象,如果子类重写了父类的方法,则运行时系统调用子类重写的方法,如果子类继承了父类的方法(未重写),那么子类创建的对象也可以调用这个方法,只不过方法产生的行为和父类的相同而已。重写父类方法时不可以降低方法的访问权限。如果重写了父类的方法后
21、使用父类的被重写方法,可以在子类的方法中使用 super 调用被重写的方法。重写只能出现在继承关系之中。当一个类继承它的父类方法时,就可能重写该父类的方法。一个特例是父类的方法被标识为 final。重写的主要优点是能够定义某个子类型特有的行为。Java程序设计第四章 继承与多态class Animal public void eat()System.out.println (动物吃东西);class Horse extends AnimalOverridepublic void eat()System.out.println (马吃草);Java程序设计第四章 继承与多态若想实现一个合格的重写
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四章 继承与多态ppt课件 第四 继承 ppt 课件
限制150内