一个多态的陷阱

域和静态方法不具有多态性:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

public class Test3 {

    public
static void main(String[] args) {

        Super sup = new
Sub();

        System.out.println(sup.field);

        System.out.println(sup.getField());

    }

}

class Super{

    public
int field = 0;

    public
int getField(){

        return
field;

    }

}

class
Sub extends
Super{

    public
int field = 1;

    public
int getField(){

        return
field;

    }

}

运行结果是:

0

1<br><br>为什么结果不是11呢?<br>域的操作都是由编译器解析的,不具有多态性。因此直接输出field的值为Super类型的值,而getField()方法是多态的,它在运行期决定。

  

一个多态的陷阱,布布扣,bubuko.com

时间: 2024-12-18 00:17:38

一个多态的陷阱的相关文章

Java基础(八):多态

一.多态的理解: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现:现实中,比如我们按下 F1 键这个动作:如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档:如果当前在 Word 下弹出的就是 Word 帮助:在 Windows 下弹出的就是 Windows 帮助和支持:同一个事件发生在不同的对象上会产生不同的结果. 二.多态的优点和必要条件: 多态的优点:1. 消除类型之间的耦合关系2

Linux版Matlab R2015b的bug——脚本运行的陷阱(未解决)

0 系统+软件版本 系统:CentOS 6.7 x64, 内核 2.6.32-573.el6.x86_64软件:Matlab R2015b(包括威锋网和东北大学ipv6下载的资源,都测试过) 1 bug描述 1.1 未知的“陷阱” 首先,这个程序在Matlab R2013a中可以完美运行,这个“陷阱“在是新安装的R2015b上才出现的. 说它是“陷阱“,是因为脚本文件涉及到大量的数据处理,比如一个几百次的循环,它可能在执行某一句的时候就失去响应了,可能是一个循环,也可能是单句,仿佛掉进了一个未知

类、多态、抽象、接口小结

什么是类 类是具有相同的属性和方法的一堆对象的集合. 什么是对象 万物皆对象,日常生活中能看到和摸到的东西都是对象. 对象由属性和行为组成 属性是对象所具有的特征,行为是对象可以做的动作 类和对象的关系 类是对象的描述,对象是类的实例 对象的每个属性被表示为类中的一个成员变量 对象的每个行为成为类中的一个方法 什么是构造函数 构造函数是类中的一个特殊方法,该方法在对象实例化时被调用.构造函数的用途是当对象实例化时,初始化对象中的成员变量. final关键字 1.final 可修饰变量(创建符号常

黑马程序员——多态、内部类、异常、包

第一讲     多态 多态可以理解为事物存在的多种体现形态. 例:动物中猫,狗.猫这个对象对应的类型是猫类型,如:猫 x = new猫(); 同时猫也是动物中的一种,也可以把猫称为动物.动物  y = new猫(); 那么动物就是猫和狗具体事物中抽取出来的父类型.父类型引用指向了子类对象. 一.多态的体现        1.父类的引用指向了自己子类的对象. 2.父类的引用也可以接收自己的子类对象. 如:   Animal a = new Cat(); 其中就将父类型的 a 引用指向了子类的对象.

一个合格的员工或者管理者是怎样炼成的

以下内容均摘抄自姜汝祥的<请给我结果>这本书: 任务是一个执行假象,因为我们绝大多数的人在实际工作中,当你以为你是在执行的时候,其实是在完成任务,因为你没有结果! 我们要懂得一个基本道理:对结果负责,是对我们工作的价值负责:而对任务负责,是对工作的程序负责,完成任务不等于结果! 什么是底线?就是做不到这一点,就会死.做商人的底线是,你必须懂得客户之所以给你钱,是因为你做事的结果,而不是因为你付出了什么.你如何辛苦并不重要,但你提供了什么价值却很重要! 英国的一份著名报纸,曾经举办过一项设有高额

组合查询——继承与多态的小练习

上次个人版机房收费做的时候,组合查询这里做的不好,没有抽出模板,导致感觉有很多冗余,这次自己挑U层,一方面是感觉自己的B层和D层做的可以提升的空间目前很小了,另一方面就是想加强一下自己对细节的注意问题. 上次组合查询是这样的,以代码为例: U层代码如下: Imports System.Collections '引入HashTable类 Public Class frmColWorkInfo Dim HtZD As New Hashtable '定义处理字段名转换的hashtable Dim Ht

C++多态有哪几种方式?

C++多态方式: (1)静态多态(重载,模板) 是在编译的时候,就确定调用函数的类型. (2)动态多态(覆盖,虚函数实现) 在运行的时候,才确定调用的是哪个函数,动态绑定.运行基类指针指向派生类的对象,并调用派生类的函数. 虚函数实现原理:虚函数表和虚函数指针. 纯虚函数: virtual int fun() = 0; 多态基础介绍: =================================================================================

避免线程陷阱

存在某些条件时,线程访问资源的时间顺序可能导致出乎意料的结果 .这种情况通常称为一种竞态条件. 在多线程中互斥锁用来避免同时使用一个公共资源.很多著名的竞态条件例子就曾导致灾难性的后果. 两个或多个线程永远阻塞,互相等待对方释放各自单独持有的资源时,则会出现线程应用中另一个常见的陷阱.这称为一个死锁条件.

朔型与多态

1.朔型 java支持隐式转换,以及显式转换.类型转换也叫做朔型.对象的朔比类型转换复杂多,对象只可以被朔型为: 1.该对象的任何一个父类类型 2.对象所属类实现的接口,虽然接口不可以生成对象,但是接口引用可以指向实现了该接口的子对象 3.或者回到自己所在的类,一个对象被朔型成父类后,还可以被朔型回来 当一个对象被朔型成父类后,他提供的方法会减少,但是当把该对象朔型回来后,他又可以使用自身的方法.从而对象朔型并没有改变他的类型,而是暂时将它当作一般的类型. 如果在朔型前和朔型后的类中提供相同的方