public class Test {
public static void main( String[] args) {
m(new GraduateStudent());
m(new Student());
m(new Person());
}
public static void m(Object x){
System.out.println(x.toString());
}
}
class GraduateStudent extends Student {
}
class Student extends Person {
public String toString() {
return "Student" ;
}
}
class Person extends Object {
public String toString() {
return "Person";
}
/**
*本程序的运行之后的输出结果是:
*Student
*Student
*Person
*/
原因如下:
静态方法m调用的是参数对象x的toString()方法,由多态的调用规则,调用的方法由调用的对象决定(而不是引用的类型),因此
m(new GraduateStudent())试图调用class GraduateStudent extends Student中的toString()方法,但是该类中没有定义toString()方法,所以jvm只能向上寻找其基类class Student extends Person,然后找到了toString()方法,于是显示Student。
同理,m(new Student());也调用Student类的toString方法,显示Student.
而m(new Person());调用Person类的toString方法,显示Person.
并且我们必须有这样一个概念:
语句
Object mary = new Person();
的意思是用Object类型的引用(reference)引用一个Person类型的对象,其中mary的成员方法toString是由Person决定的,而不是Object。这个是多态的执行规则。跟静态不静态没有关系。
分享到:
相关推荐
本文将对C++中的多态进行详细的解释和分析,通过一个典型的多态练习题,展示多态的使用方法和实践价值。 多态概述 多态是面向对象编程(Object-Oriented Programming,OOP)中一个重要的概念,它允许我们使用不同...
C#面向对象编程-多态习题[整理].pdf
多态是指一个接口可以有多种不同的表现形式或行为。在C++中,多态主要通过虚函数实现。当基类指针或引用指向派生类的对象时,调用虚函数会根据实际的对象类型来执行相应的函数实现,这就是动态绑定或运行时多态。在...
java多态、继承练习题,包含题目与答案,............................................................................................................
例如,假设我们有一个`Animal`类有一个`makeSound`方法,`Dog`和`Cat`类都继承了`Animal`并且重写了`makeSound`,那么在运行时,无论我们调用哪个动物的`makeSound`,都会得到相应动物特有的声音,这就是多态的体现...
**继承** 是面向对象编程的一个核心概念,它允许创建一个新类(称为 **子类** 或 **派生类**),该类继承了现有类(称为 **父类**、**基类** 或 **超类**)的所有属性和方法。 **示例 12.1** ```python class A: ...
在编程领域,多态(Polymorphism)是面向对象编程中的一个重要概念,它允许我们用一个接口处理多种不同的数据类型。多态性使得程序更加灵活,可扩展性更强,能够提高代码的重用率。本练习案例将深入探讨多态的常见...
数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是类。类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作。 五、公有派生类的成员函数 在公有派生类的成员函数不...
Java是一门面向对象的语言,抽象、跨平台、应用广,适合于广大应届毕业生、高中生学习。
继承允许一个类(子类)从另一个类(父类)中继承属性和行为,从而实现代码的复用和类的层次结构。C++中的继承有单继承、多继承和多重继承。子类可以扩展或修改父类的功能,这种特性在设计复杂系统时尤其有用。但是...
Java多态是面向对象编程中的一个核心概念,它允许我们以一种统一的方式处理不同类型的对象。在Java中,多态性主要体现在方法的重写(Override)和重载(Overload)。通过多态,我们可以编写出更加灵活、可扩展的代码...
**题目描述**:给定一个 `Question` 类,包含一个私有成员变量 `num` 和一个静态方法 `update`。主函数中创建了一个 `Question` 类的对象,并修改了 `num` 的值,然后调用了 `update` 方法。 **解析**:在这个例子...
继承是面向对象设计的一个重要特性,它允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。在这个题目中,`Topic`类继承自`Tip`类,`Reply`类又继承自`Topic`类。这种关系表示`Topic`和`Reply`都是...
比如,“问题类”可能有一个抽象的“检查答案”方法,单选题和多选题都会覆盖这个方法,各自实现自己的检查逻辑,这就是多态的体现。这样设计的好处在于,无需关心具体是单选题还是多选题,只需要调用统一的方法,...
根据文件名推测,这是一个关于矩形类的练习,可能包含了如何利用继承和多态的概念来设计一个图形类库。通常,我们可能会有一个抽象的`Shape`类作为基类,它包含共享的属性(如颜色)和方法(如获取面积),然后有...
【Java面试题】谈谈对Java多态的理解
多态是 Java 中的一种机制,允许一个对象引用多种数据类型。多态的优点是可以提高代码的灵活性和扩展性。 在 Java 中,可以通过方法重写和方法重载来实现多态。方法重写是子类继承父类的方法,并提供不同的实现。...
多态的经典案例,怎样代码重用,怎样去除冗余代码,这里一个案例4种不同层次代码解析。属性:员工编号:id 姓名:name 性别:gender 基本工资:baseSalary。。。。。。 程序员工资 = 基本工资 + 加班工时*50 项目经理...
多态是面向对象编程的三大特性之一,它是指同一个操作可以对不同的对象产生不同的结果。多态可以分为两种形式:方法重载和方法重写。 1. 方法重载:是指多个方法具有相同的方法名,但不同的参数列表。 2. 方法重写...