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 关键字 的相关文章

随机推荐

  • 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