`
iamcrzay
  • 浏览: 57588 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

一个关于多态的题

    博客分类:
  • Java
JVM 
阅读更多
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++课程,多态练习题

    本文将对C++中的多态进行详细的解释和分析,通过一个典型的多态练习题,展示多态的使用方法和实践价值。 多态概述 多态是面向对象编程(Object-Oriented Programming,OOP)中一个重要的概念,它允许我们使用不同...

    C#面向对象编程-多态习题[整理].pdf

    C#面向对象编程-多态习题[整理].pdf

    一个HW 多态题目 一个HW 多态题目

    多态是指一个接口可以有多种不同的表现形式或行为。在C++中,多态主要通过虚函数实现。当基类指针或引用指向派生类的对象时,调用虚函数会根据实际的对象类型来执行相应的函数实现,这就是动态绑定或运行时多态。在...

    java多态练习题

    java多态、继承练习题,包含题目与答案,............................................................................................................

    关于继承和多态的简单练习

    例如,假设我们有一个`Animal`类有一个`makeSound`方法,`Dog`和`Cat`类都继承了`Animal`并且重写了`makeSound`,那么在运行时,无论我们调用哪个动物的`makeSound`,都会得到相应动物特有的声音,这就是多态的体现...

    第十二章Python继承和多态习题与答案--中文

    **继承** 是面向对象编程的一个核心概念,它允许创建一个新类(称为 **子类** 或 **派生类**),该类继承了现有类(称为 **父类**、**基类** 或 **超类**)的所有属性和方法。 **示例 12.1** ```python class A: ...

    多态的练习案例

    在编程领域,多态(Polymorphism)是面向对象编程中的一个重要概念,它允许我们用一个接口处理多种不同的数据类型。多态性使得程序更加灵活,可扩展性更强,能够提高代码的重用率。本练习案例将深入探讨多态的常见...

    C++重点复习题(多态和继承).doc

    数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是类。类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作。 五、公有派生类的成员函数 在公有派生类的成员函数不...

    多态经典习题

    Java是一门面向对象的语言,抽象、跨平台、应用广,适合于广大应届毕业生、高中生学习。

    c/c++面试题(一些常出的面试题,包括多态,继承,函数参数等常考的内容)

    继承允许一个类(子类)从另一个类(父类)中继承属性和行为,从而实现代码的复用和类的层次结构。C++中的继承有单继承、多继承和多重继承。子类可以扩展或修改父类的功能,这种特性在设计复杂系统时尤其有用。但是...

    Java多态,面向对象编程题demo.zip

    Java多态是面向对象编程中的一个核心概念,它允许我们以一种统一的方式处理不同类型的对象。在Java中,多态性主要体现在方法的重写(Override)和重载(Overload)。通过多态,我们可以编写出更加灵活、可扩展的代码...

    JAVA面向对象基础测试题-继承-封装-多态等测试题.docx

    **题目描述**:给定一个 `Question` 类,包含一个私有成员变量 `num` 和一个静态方法 `update`。主函数中创建了一个 `Question` 类的对象,并修改了 `num` 的值,然后调用了 `update` 方法。 **解析**:在这个例子...

    9、Java面向对象之继承和多态作业题[收集].pdf

    继承是面向对象设计的一个重要特性,它允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。在这个题目中,`Topic`类继承自`Tip`类,`Reply`类又继承自`Topic`类。这种关系表示`Topic`和`Reply`都是...

    单选、多选题模拟(类的继承,正则表达式,多态)

    比如,“问题类”可能有一个抽象的“检查答案”方法,单选题和多选题都会覆盖这个方法,各自实现自己的检查逻辑,这就是多态的体现。这样设计的好处在于,无需关心具体是单选题还是多选题,只需要调用统一的方法,...

    C#关于继承与多态的简单练习源码

    根据文件名推测,这是一个关于矩形类的练习,可能包含了如何利用继承和多态的概念来设计一个图形类库。通常,我们可能会有一个抽象的`Shape`类作为基类,它包含共享的属性(如颜色)和方法(如获取面积),然后有...

    【Java面试题】谈谈对Java多态的理解

    【Java面试题】谈谈对Java多态的理解

    java基础继承封装多态

    多态是 Java 中的一种机制,允许一个对象引用多种数据类型。多态的优点是可以提高代码的灵活性和扩展性。 在 Java 中,可以通过方法重写和方法重载来实现多态。方法重写是子类继承父类的方法,并提供不同的实现。...

    多态 经典案例 一题多角度解析

    多态的经典案例,怎样代码重用,怎样去除冗余代码,这里一个案例4种不同层次代码解析。属性:员工编号:id 姓名:name 性别:gender 基本工资:baseSalary。。。。。。 程序员工资 = 基本工资 + 加班工时*50 项目经理...

    封装、继承、多态.docx

    多态是面向对象编程的三大特性之一,它是指同一个操作可以对不同的对象产生不同的结果。多态可以分为两种形式:方法重载和方法重写。 1. 方法重载:是指多个方法具有相同的方法名,但不同的参数列表。 2. 方法重写...

Global site tag (gtag.js) - Google Analytics