Java 继承 - this 关键字

2023-12-19

我在网上搜索了类似的问题,但没有找到。所以,在这里发帖。

在下面的程序中,为什么'i'的值被打印为100?

AFAIK 'this' 指的是当前对象;在本例中是“TestChild”,并且类名也被正确打印。但为什么实例变量的值不是200呢?

public class TestParentChild {
    public static void main(String[] args) {
        new TestChild().printName();
    }
}

class TestChild extends TestParent{
    public int i = 200;
}

class TestParent{
    public int i = 100;
    public void printName(){
        System.err.println(this.getClass().getName());
        System.err.println(this.i); //Shouldn't this print 200
    }
}

此外,以下输出正如我所预期的那样。当我调用“时,子类方法被调用”this.test()”来自家长课。

public class TestParentChild {
    public static void main(String[] args) {
        new TestChild().printName();
    }
}

class TestChild extends TestParent{
    public int i = 200;
    public void test(){
        System.err.println("Child Class : "+i);
    }

}

class TestParent{
    public int i = 100;
    public void printName(){
        System.err.println(this.getClass().getName());
        System.err.println(this.i); //Shouldn't this print 200
        this.test();
    }
    public void test(){
        System.err.println("Parent Class : "+i);
    }
}

Java没有虚拟字段,所以i领域在printName总是指TestParent.i而不是任何后代。

Java 中通过继承实现的多态性仅发生在方法中,因此如果您想要所描述的行为,那么您需要这样:

class TestChild extends TestParent{

    private int i = 200;

    @Override
    public int getI() { return this.i; }
}

class TestParent{

    private int i = 100;

    public int getI() { return this.i; }

    public void printName(){
        System.err.println( this.getClass().getName() );
        System.err.println( this.getI() ); // this will print 200
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 继承 - this 关键字 的相关文章

  • Hibernate注解放置问题

    我有一个我认为很简单的问题 我见过两种方式的例子 问题是 为什么我不能将注释放在字段上 让我举一个例子 Entity Table name widget public class Widget private Integer id Id G
  • 是什么决定了从 lambda 创建哪个函数式接口?

    请考虑这个例子 import java util function Consumer public class Example public static void main String args Example example new
  • Java:迭代 Collection 的最佳方法(此处为 ArrayList)

    今天 当我看到一段我已经使用了数百次的代码时 我很高兴地开始编码 迭代集合 此处为 ArrayList 出于某种原因 我实际上查看了 Eclipse 的自动完成选项 这让我想知道 在什么情况下以下循环比其他循环更好使用 经典的数组索引循环
  • 如何使用 Java 处理 Selenium WebDriver 中的新窗口?

    这是我的代码 driver findElement By id ImageButton5 click Thread sleep 3000 String winHandleBefore driver getWindowHandle drive
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • Hibernate.createBlob() 方法从 Hibernate 4.0.1 开始已弃用,并移至 Hibernate.getLobCreator(Session session).createBlob()

    Method Hibernate createBlob 已弃用自休眠4 0 1并搬到Hibernate getLobCreator Session session createBlob 任何解决方案我应该在方法内传递什么getLobCrea
  • 在 S3 中迭代对象时出现“ConnectionPoolTimeoutException”

    我已经使用 aws java API 一段时间了 没有遇到太多问题 目前我使用的是库 1 5 2 版本 当我使用以下代码迭代文件夹内的对象时 AmazonS3 s3 new AmazonS3Client new PropertiesCred
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • 以编程方式在java的resources/source文件夹中创建文件?

    我有两个资源文件夹 src 这是我的 java 文件 资源 这是我的资源文件 图像 properties 组织在文件夹 包 中 有没有办法以编程方式在该资源文件夹中添加另一个 properties 文件 我尝试过这样的事情 public s
  • react-native run-android 失败并出现错误:任务 ':app:dexDebug' 执行失败

    我使用的是 Windows 8 1 和react native cli 1 0 0 and react native 0 31 0 添加后react native maps对于该项目 我运行了命令react native upgrade并给
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话

随机推荐

  • EF 4.1 映射问题

    我有一个与其自身有关系的类 public class Person public long ID get set public string Name get set public virtual Person Mother get set
  • 根据 Pandas 中的另一列连接一组列值

    给定一个 Pandas 数据框 其中有一些标记的系列 例如Name and Villain 假设数据框具有以下值 Name 蝙蝠侠 蝙蝠侠 蜘蛛侠 蜘蛛侠 蜘蛛侠 蜘蛛侠 Villain 小丑 贝恩 绿魔 电光 毒液 章鱼博士 总共 上述数
  • 如何在 codeigniter 中使用自定义字体和图标

    猛击大家 我想在我的视图中使用来自 flaticon com 的自定义图标 中的图标http successpermis com css flaticon html http successpermis com css flaticon h
  • Android 服务读取 localStorage?

    我为 Android 开发了一个 PhoneGap 应用程序 该应用程序由以下部分组成webapp HTML jQuery 和后台服务 Java 代码 由 web 应用程序启动 这个网络应用程序写入窗口本地存储 like 可以读这个吗nam
  • html页面无法通过libcurl获取cookie

    我修改了之前的代码 有兴趣的话可以看我之前的帖子通过curl设置cookie https stackoverflow com questions 6007225 setting cookie through curl但这是一个新的开始我的新
  • Appcelerator 应用程序无法重新启动 (Android)

    我创建了一个应用程序 一切正常 但是 当我按回键关闭应用程序 bij 并再次打开该应用程序时 它不会通过启动屏幕 如果我通过 Android 运行应用程序屏幕完全关闭该应用程序 它会再次正常打开 以前有人遇到过这个问题吗 提前致谢 将您的应
  • 元素随机排列且 maxOccurs > 1

    我需要创建一个XSD1 0 验证XML file 验证将使用lxml etree from python 并且该工具仅支持 XML Schema 1 0 lxml 与模式 1 1 https stackoverflow com questi
  • Angular 2 中的动态模板和 templateURL

    每当我必须在页面中动态包含模板时 我就一直在 Angular 1 中使用 ng include 现在如何在 Angular 2 中实现这一点 我尝试搜索并找到了这些 https groups google com forum topic a
  • Django 选择查询时间差异

    我正在尝试查询 django 中的数据库表 其中包括以下列 id start time end time 我可以直接在查询中获取差异 而不是获取两者的单独值吗 有这样的效果 SELECT id Diff start time end tim
  • 从 shell 脚本在 Firefox 的特定实例中打开新选项卡

    我有一个 shell 脚本 可以创建 Firefox 配置文件 然后使用它们同时打开多个 Firefox 实例 问题是如何在特定的 Firefox 实例中打开 URL 我努力了 firefox CREATEPROFILE test fire
  • 如何自动启动/预热 IIS 中托管的 .net core Web 应用程序

    我有一个 net core 3 1 Web 应用程序 托管在 IIS 上 我无法弄清楚如何在第一个请求之前运行一段代码 我做了以下事情 设置应用程序池的 启动模式 AlwaysRunning 和 空闲超时 0 在网站上设置 预加载已启用 t
  • 有关 SP 和 UDF 的帮助吗?

    我正在尝试通过 MySQL 和 PHP 学习和使用 SP 存储过程 和 UDF 用户定义函数 SP和UDF有什么区别 用途是什么 一段简单的代码在 PHP 和 SQL 中会是什么样子 其中 SP 正在更新 写入或从 MySQL 数据库的表中
  • 为什么应用程序通常不使用 int 在内部表示货币值?

    为什么应用程序通常不使用整数数据类型 例如int or long在 C Java C 中 在内部表示货币值 而不是使用浮点数据类型 float double 或者类似Java的BigDecimal 例如 如果我正在编写一个 Java 应用程
  • 在移动 safari 中是否有使用 onbeforeunload 的替代方法?

    在 mobile safari 中是否有替代方法可以代替 onbeforeunload 我注意到 Google 能够捕获onbeforeunloadmobile safari 中的事件 有谁知道他们是怎么做到的吗 谷歌能够使用他们的 Gma
  • 在heroku上使用node.js开发时钟和workers

    我正在开发一项服务 需要每五分钟为不同的用户分析来自社交媒体网络的数据 我正在使用 node js 开发它 并将在 Heroku 上实现它 根据本文 https devcenter heroku com articles scheduled
  • 用于 mysql 的多个 docker 容器或一个具有多个数据库的实例

    我有一个关于使用 docker 容器的最佳实践的问题 我开发的每个应用程序都需要一个数据库 现在我的问题是我是否应该使用一个内部有多个数据库的 mysql docker 实例 还是应该为每个数据库创建一个实例 我发现为每个数据库创建一个实例
  • 网格布局内的中心列[重复]

    这个问题在这里已经有答案了 我已经开始学习网格系统 显示 网格 并且我有以下代码 但我不知道如何将最后两列 4和5 居中而不在网格模板列中添加更多列并使用网格列中的 column start 和 grid column end 是否可以 H
  • R 中逻辑回归的混淆矩阵

    我想使用我的训练数据和测试数据计算逻辑回归的两个混淆矩阵 logitMod lt glm LoanStatus B data train family binomial link logit 我将预测概率的阈值设置为 0 5 confusi
  • 枚举中定义的项目总数

    如何获取枚举中定义的项目数 您可以使用静态方法Enum GetNames https msdn microsoft com en us library system enum getnames它返回一个数组 表示枚举中所有项目的名称 该数组
  • Java 继承 - this 关键字

    我在网上搜索了类似的问题 但没有找到 所以 在这里发帖 在下面的程序中 为什么 i 的值被打印为100 AFAIK this 指的是当前对象 在本例中是 TestChild 并且类名也被正确打印 但为什么实例变量的值不是200呢 publi