第三章_继承和多态
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.2.1 派生子类
Java中的继承是通过extends关键字来实现的 class SubClass extends SuperClass { …… } 如果没有extends子句,则该类默认为 java.lang.Object的子类。 所以,Java中,所有 的类都是通过直接或间接地继承 java.lang.Object得到的。
继承关系在UML图中,是用一个箭头来表示子类与父类的 关系的。 相当于
is a
类Student从类Person继承,定义如下: class Student extends Person { //… }
4.2.2 域的继承与隐藏、添加
1.域的继承
子类可以继承父类的所有域 Student自动具有Person的属性(name,age)
4.2.3 方法的继承、覆盖与添 加
1.方法的继承 父类的非私有方法也可以被子类自动继承。如, Student自动继承Person的方法sayHello和 isOlderThan。 2.方法的覆盖 正像子类可以定义与父类同名的域,实现对父 类域变量的隐藏一样,子类也可以重新 定义 与父类同名的方法,实现对父类方法的覆盖 (Overriding)。
作者:胡玉洋
继承(inheritance)是面向对象的程序设计中最为重要的 特征之一。 由继承而得到的类为子类(subclass),被继承的类为父 类或超类(superclass),父类包括所有直接或间接被继 承的类。 一个类只能有一个直接父类。 子类继承父类的状态和行为,同时也可以修改父类的状态 或重载父类的行为,并添加新的状态和行为。 采用继承的机制来组织、设计系统中的类,可以提高程序 的抽象程度,使之更接近于人类的思维方式,同时也通过 继承能较好地实现代码重用,可以提高程序开发效率,降 低维护的工作量。
public class BC 继承自 APT { public int TOEFL; } public class GS 继承自 APT { public int art; public int Music; public int RS; }
好处: 1、提高了代码复用率, 减少了代码的录入量 2、组织结构更加清晰 3、方便代码的维护 (比如结业水平考试科 目发生了变化,则只 用维护APT类,而不用 在每个类中去修改)
void sayHello(){ System.out.println("Hello! My name is " + name + ". My school is " + school ); } 可见,通过方法的覆盖,能够修改对象的同 名方法的具体实现方法。
3.方法的重载
一个类中可以有几个同名的方法,这称为方法的重载 (Overloading)。同时,还可以重载父类的同名方法。 与方法覆盖不同的是,重载不要求参数类型列表相同。重 载的方法实际是新加的方法。 如,在类Student中,重载一个名为sayHello的方法: void sayHello( Student another ){ System.out.println("Hi!"); if( school == another.school ) System.out.println(" Shoolmates "); }
有时需要使用super以区别同名的域与方法。如,使用 super可以访问被子类所隐藏了的同名变量。又如,当覆 盖父类的同名方法的同时,又要调用父类的方法,就必须 使用super。如: void sayHello(){ super.sayHello(); System.out.println( "My school is " + school ); } 从这里可以看出,即使同名,也仍然可以使用父类的域和 方法,这也使得在覆盖父类的方法的同时,又利用已定义 好的父类的方法。
在程序中使用数据类型的类
public class MemoryAnalysis { public static void main(String[] args) { Person mate=new Person("小明",15); String newName="小红"; int newAge=18; mate.SetName(newName); mate.SetAge(newAge); mate.SayHello(); } }
2. 域的隐藏
子类重新定义一个与从父类那里继承来的域变量完全相同的变量, 称为域的隐藏。域的隐藏在实际编程中用得较少。
3.域的添加
在定义子类时,加上新的域变量,就可以使子类比父类多一些属 性。如: class Student extends Person { String school; int score; }
定义一个继承person的student子类
public class student extends Person { public String Grade; public String Class; public student(String name,int age,String Grade,String Class) { super(name,age); //调用超类的构造方法 this.Grade =Grade; this.Class=Class; } public void SetGrade(String Grade) { this.Grade=Grade; } public void SetClass(String Class){ this.Class=Class; } public void SayHello(){ //Method Overriding 方法重载,重写了超类的方法 System.out.println("我的名字叫"+name+",我"+age+"岁了,"+"我就读于 "+Grade+Class); } }
4.方法的添加
子类可以新加一些方法,以针对子类实现相 应的功能。 如,在类Student中,加入一个方法,对分数 进行判断: boolean isGoodStudent(){ return score>=90; }
4.2.4 super的使用
1.使用super访问父类的域和方法 子类自动地继承父类的属性和方法,一般情况下,直接使用父 类的属性和方法,也可能以使用this来指明本对象。 注意:正是由于继承,使用this可以访问父类的域和方法。但有 时为了明确地指明父类的域和方法,就要用关键字super。 例如:父类Student有一个域age,在子类Student中用age, this.age, super.age来访问age是完全一样的: void testThisSuper(){ int a; a = age; a = this.age; a = super.age; } 当然,使用super不能访问在子类中添加的域和方法。
general
AP
BC
子类与超类的关系是 “is a”的关系
一个可以用作superclass的类
一个person类,具有两个类属性变量(也叫成员变量):name和age, 具有三个操作方法:setName()、setAge()和sayHello()
public class Person { public String name; public int age; public Person(String name,int age) { this.name =name; this.age=age; } public void SetName(String name){ this.name=name; } public void SetAge(int age){ this.age=age; } public void SayHello(){ System.out.println("我的名字叫"+name+",我"+age+"岁了"); } }
第三章 继承和多态
继承 现实生活中的继承 泛指把前人的文化、知识、财产等接受过来 好处: 一些好的文化、知识、财产得到更大程度的利用
普高班课程 语、数、外、政、历、地、理、化、生、信、通、体 研、音、美 AP班课程 语、数、外、政、历、地、理、化、生、信、通、体 心理学、SAT、TOEFL、AP BC班课程 语、数、外、政、历、地、理、化、生、信、通、体 TOEFL
public class general {
public int chinese; public int math; public int english; public int physics; public int chemistry ; public int biology; public int political; public int history; public int Geography; public int IT; public int GT; public int P.E; public int art; public int Music; public int RS;
为什么需要继承,看几个实例
程序设计中的继承 指一个对象直接使用另一对象的属性和方法 好处: 一些属性和方法得以最大程度的复用,增加了代码复用率 ,减少出错率,清晰化了组织结构 使用: 当程序比较大的时候,通过抽象提炼把一些共有的属 性和方法建成类
继承的例子
person
teacher
student
public class BC { public int chinese; public int math; public int english; public int physics; public int chemistry ; public int biology; public int political; public int history; public int Geography; public int IT; public int GT; public int P.E; public int TOEFL }
}
wenku.baidu.com
一点变化
public class APT { public int chinese; public int math; public int english; public int physics; public int chemistry ; public int biology; public int political; public int history; public int Geography; public int IT; public int GT; public int P.E; } public class AP 继承自 APT { public int SAT; public int psychology; public int AP; public int TOEFL; }
共同点:都含有学业水平考试科目(红色部分) 不同点:加修项目不同
public class AP { public int chinese; public int math; public int english; public int physics; public int chemistry ; public int biology; public int political; public int history; public int Geography; public int IT; public int GT; public int P.E; public int SAT; public int psychology; public int AP; public int TOEFL; }