“多态”一个需要注意的问题

在C#中只有属性和方法能被声明为virtual,而字段则不能。因此注意下面例子中的问题。

  public class Base
  {
    public int i = 10;

    public virtual void Test()
    {
      Console.WriteLine(i);
    }
  }

  public class Deliver : Base
  {
    public int i = 20;

    public override void Test()
    {
      Console.WriteLine(i);
    }
  }

  public class Class1
  {
    public static void Main(string[] args)
    {
      Deliver d = new Deliver();
      Base b = d;

      d.Test(); // 20
      b.Test(); // 20

      Console.WriteLine(b.i); // 10 问题就出在这,字段i并不支持多态。
    }
  }
 

时间: 2024-08-01 23:40:03

“多态”一个需要注意的问题的相关文章

《青花瓷》JAVA版:周杰伦告诉你怎么学Java

"青花瓷Java版"为北京师范大学教育学部蔡苏作词原创,覆盖教育技术学院专业选修课<面向对象程序设计>教学大纲中的所有知识点. 视频:http://player.youku.com/player.php/sid/XMjU3Mjk2NzA0/v.swf 歌词: JDK 和JRE 莫要混淆去 环境变量的配置有时让人迷 初学的人莫贪图上来I D E 先用J D K +文本编辑器 面向对象仨特点一定要牢记 封装继承和多态一个不能离 接口为多重继承 抽象类一定要有实例 O b je

java学习笔记3--类与对象的基础

1.面向对象的程序设计方法概述 面向对象的程序设计 与结构化程序设计方法相比,更符合人类认识现实世界的思维方式,已成为程序设计的主流方向 涉及的主要概念:抽象.封装.继承.多态 对象 现实世界中:万物皆对象,都具有各自的属性,对外界都呈现各自的行为 程序中:一切都是对象,都具有标识 (identity), 属性和行为(方法),通过一个或多个变量来保存其状态,通过方法(method) 实现他的行为 类 将属性及行为相同或相似的对象归为一类,类可以看成是对象的抽象,代表了此类对象所具有的共有属性和行

变量-Java 中,多态和动态绑定 是一个意思吗?

问题描述 Java 中,多态和动态绑定 是一个意思吗? 我查了一些手头仅有的资料(包括书籍,QQ群,百度),找到的答案都不是很明确,自己目前的理解如下, 多态:指父类引用类型变量指向子类的对象,这样一种状态. 动态绑定:指在多态的情况下,在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法,指这样一种过程. 另外,马士兵在他的java基础视频教学中说"多态就是动态绑定".....感觉不太对阿.. 求大虾指点~~ 解决方案 多态不仅是父类引用子类,继承也是多态

多态-java 模拟一个汽车工厂生产汽车

问题描述 java 模拟一个汽车工厂生产汽车 解题提示a)可生产大卡车.大客车.小汽车.跑车等b)不同的车售价不同c)涉及知识点有类.接口.继承.封装.多态这哪里错了啊,为什么输出出来不是车名和价格啊?希望大神们说的详细点 解决方案 需要看看你Car里面的toString是否正确重写.不然输出肯定是类名@hashCode十六进制组成的一串地址串的.Car类提供:@Overridepublic String toString(){ return ""name=""+t

设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)_其它综合

这篇博文是从实际生活中,提炼出来的设计理念,它现在是骨架,现在我加以代码实例,完成程序的血肉,以求让大家活生生的体会设计中的精髓. 自从我们学习面向对象编程以来,它方便了我们的思维思考模式,一个事物具备什么,就以对应的属性及方法加之. (▽) 没有什么难的,但是你学到的是最基础的语法和连自己都不是很了解的语言,用一段C语言程序,你可以很轻松的把它改成C#,JAVA等,这有什么难的?大多数程序员们扭曲了C#语言,把C的语法都移植到C#上(在我不了解C#的时候,我自己都这么做过),错了不可怕,可怕的

一个小例子对多态简单的理解

class Parent{     int age;     String name;     public Parent(String name, int age){         this.name = name;         this.age = age;     }     public void writeWay(){         System.out.println("毛笔!");      }   }     class Child extends Parent

一个使用enum实现多态的例子

下面的写法与直接 使用静态方法而言,可读性.可维护性更强是不是有DSL的感觉....   当然enum反编译后,的确就是静态方法. /** * Created by MyWorld on 2016/8/3. */ public enum Operation { PLUS("+") { @Override public int apply(int x, int y) { return x + y; } }, MINUS("-") { @Override public

C#多态小结——面向对象编程的三大机制之二

C#的多态性: 我的理解是:同一个操作,作用于不同的对象时,会有不同的结果,即同一个方法根据需要,作用于不同的对象时,会有不同的实现. C#的多态包括:接口多态,继承多态. 其中继承多态又包括通过虚拟方法实现的多态和通过抽象方法实现的多态性 例如:基类动物都有吃的方法,但是不同的动物吃的东西就会不一样,例如狼吃肉,羊吃草,这样"吃"的这个方法就要在派生类里面重新实现以下,运行时,通过指向基类的指针,来调用实现派生类中的方法. 接下来举例实现多态性. 1. 接口多态性 把动物"

一个用于J2EE应用程序的异常处理框架

在大多数Java项目中,大部分代码都是样板代码.异常处理就属于此类代码.即使业务逻辑只有3到4行代码,用于异常处理的代码也要占10到20行.本文将讨论如何让异常处理保持简单和直观,使开发人员可以专心于开发业务逻辑,而不是把时间浪费在编写异常处理的样板代码上.本文还将说明用于在J2EE环境中创建和处理异常的基础知识和指导原则,并提出了一些可以使用异常解决的业务问题.本文将使用Struts框架作为表示实现,但该方法适用于任何表示实现. 使用checked和unchecked异常的场景 您是否曾经想过