1. 现在需要定义一个新的类来代表学生:
①每一个学生都属于一个特定的年级。
②学生有名字,自我介绍。
2. 因此,我们可以将学生类的定义写成:
class Student
properties
name
year
constructor
Student(name, year)
methods
introduceSelf()
如果我们可以用某种特别的方式共享教授和学生中相同属性的声明,那么这会节省我们不少的精力。更准确的说,在某种层级上,二者实际上是同种事物,他们能够具有相同的属性也是合理的。继承(Inheritance)可以帮助我们完成这一操作。
3. 很容易注意到教授和学生都是人,而人是具有姓名,并且可以介绍自己的。我们可以将人定义为一个新类,即 Person
类,在 Person
类中,我们可以定义所有作为人的通用属性。接下来,我们可以定义 Professor
类和 Student
类由 Person
类派生(derive)而来,在伪代码中定义如下:
class Person
properties
name
constructor
Person(name)
methods
introduceSelf()
class Professor : extends Person
properties
teaches
constructor
Professor(name, teaches)
methods
grade(paper)
introduceSelf()
class Student : extends Person
properties
year
constructor
Student(name, year)
methods
introduceSelf()
①称 Person
类是 Professor
类和 Student
类的超类(superclass)或父类(parent class)。反之,我们称 Professor
类和 Student
类是 Person
类的子类(subclass 或 child class)。
②三个类中都定义了 introduceSelf()
方法。因为尽管所有人都想要介绍他们自己,但是他们可能会以不同的方式去做这件事。
walsh = new Professor("沃尔什", "心理学");
walsh.introduceSelf(); // '我是沃尔什,我是你们的心理学老师。'
summers = new Student("萨摩斯", 1);
summers.introduceSelf(); // '我是萨摩斯,我是一年级的学生。'
③为不是教授或学生的人设定一个默认的打招呼方式:
pratt = new Person("普拉特");
pratt.introduceSelf(); // '我是普拉特。'
4. 当一个方法拥有相同的函数名,但是在不同的类中可以具有不同的实现时,我们称这一特性为多态(polymorphism)。
当一个方法在子类中替换了父类中的实现时,我们称之为子类重写/重载(override)了父类中的实现。