`

一个小问题引发的思考

 
阅读更多

曾经遇到过这样一个小问题:

class A {
private int i=1;
public int getI(){
return i;
}
public void setI(int i){
this.i=i;
}
}

public class B extends A {
int i=2;
public static void main (String [] args) {
B b = new B();
System.out.println(b.getI());
}
}

结果是1,而不是2.
这个问题感觉还不错。

1.并不是private成员不会被继承.事实上子类可以继承父类的任何变量和方法。private、protected只是访问权限而已。即使i是public的
输出结果也肯定是1.

2.方法可以覆盖,成员变量并没有覆盖一说,也就是子类的i和父类的i是共存在子类体内的。父类对象中有i变量、set get两个方法。子类class中应有i【继承于父类对象】、i【子类对象】两个变量、set get两个方法【继承于父类对象】。

3.java中的原则是调用的是哪个类的方法,那么这个方法访问的就是这个类中的成员。子类中没有覆盖public int getI()这个方法的话,那么子类调用的其实是父类的getI()方法.所以返回的是父类中的i.

所以如果子类覆盖了getI()方法,那么就会输出的是子类中的i了,因为调用的是子类中的方法。

以上是我曾经遇到的一个问题,今天遇到另一个例子,进而进行思考!

class A{
 public int m = 1;
 A(){
  System.out.println("A have construct");
  System.out.println(m);
  tt();//因为tt()方法已经被覆盖,所以此处调用的是子类的tt()方法;
//子类的数据成员此时还未显式的初始化,所以返回值为默认的0;
}
 public void tt(){
  System.out.println(m);
 }
}
public class B extends A{
 public int n = 2;
 B(){
  System.out.println("B have construct");
  System.out.println(n);
  tt();
}
 public void tt(){
  System.out.println(n);
 }
 public static void main(String args[]){
  B b = new B();
 }


输出结果是:
A have construct
1
0
B have construct
2
2

如注释部分的解说!
这个例子中,B中的tt()方法已经覆盖了父类中的tt()方法.所以在执行父类的构造方法时,调用的是子类的tt()方法;

PS:
构造一个对象的过程是:
先父类,后子类;
先成员变量初始化,后构造函数.

分享到:
评论

相关推荐

    一个实例引发的思考.ppt(sql2000)

    小虎的实现有一个小bug,而空帷的实现仅适用于Firefox,这表明在选择框架时要考虑其兼容性和适用范围。 接着,话题二讨论了需求的变化对实现方式的影响。如果要求在收缩时标题背景色改变,原有的实现可能变得复杂。...

    思考疑问3D小人ppt模板.rar

    "思考疑问3D小人ppt模板"是一个专为呈现思考、疑问或问题解决场景设计的独特模板。这个模板的特点在于其立体的问号和3D小人的元素,这些元素可以增强观众对内容的理解和兴趣。 首先,我们来看3D小人。在PPT设计中,...

    乔晓阳 - 一个直方图问题引发的思考

    标题中提及的“一个直方图问题引发的思考”指向的是在Oracle数据库环境下,对直方图和SQL执行计划的深入分析和优化过程。直方图是Oracle数据库中用于记录列内值分布的统计工具,它在优化器选择执行计划时起到关键...

    问号思考解决问题PPT模板.rar

    - 表格:提供了一个结构化的方式来整理数据、比较不同解决方案,使问题分析更加清晰和有条理。 3. **适用场景**: - 项目讨论:在项目团队中,可以用来探讨遇到的问题,提出和评估各种解决方案。 - 教学培训:...

    一个发光二极管引发测量细节的思考

    本篇探讨的主题就是一个典型的案例:一个不起眼的发光二极管(LED指示灯)是如何成为测量误差的源头。 首先,我们必须明确一点,测量结果的准确性不仅依赖于精密的测量仪器,更依赖于正确的测量方法和严谨的测试...

    从食品安全问题引发的思考.doc

    从食品安全问题引发的思考.doc

    因为一个Crash引发对Swift构造器的思考分析

    Swift 构造器的思考分析 Swift 语言提供了两种构造器:指定构造器和便利构造器。类倾向于拥有极少的指定构造器...在这里,我们总结了 Swift 构造器的基本概念和工作机制,并且分析了一个因为 Crash 引发的思考分析。

    近年食品安全问题引起的思考.doc

    近年食品安全问题引起的思考.doc

    关于北京市停车问题的思考

    停车问题不仅仅是城市交通问题的一个方面,更是城市规划和管理的重要组成部分。因此,需要我们从多方面进行考虑,包括交通需求管理、城市规划、政策调节等。 在解决北京市停车问题时,需要从以下几个方面进行考虑:...

    食品安全问题引起的思考和建议.doc

    食品安全问题引起的思考和建议.doc

    哲学、哲学精神与未来教育——人工智能发展所引发的思考.pdf

    哲学的核心是哲学精神,它不同于教条式的教育模式,后者往往给予人们一个肯定的答案,而哲学精神则鼓励人们自主思考一系列问题,如“为什么它是这个?”、“它怎样成为了这个?”、“如何能够让它不是这个?”教条式...

    【二等奖观察记录】小班 《几个亮片引发的思考》.docx

    这篇观察记录来自于全国幼儿教师专业风采大赛,主题是《几个亮片引发的思考》,主要关注的是幼儿园小班儿童的安全问题,特别是衣服上带有小亮片等装饰物可能带来的潜在风险。 观察目标是确保孩子们能够在没有安全...

    像程序员一样思考

    本书分析了程序员解决问题的方法,并且教授你其他图书所忽略的一种能力,即如何像程序员一样思考。 全书分为8章。第1章通对几个经典的算法问题切入,概括了问题解决的基本技巧和步骤。第2章通过实际编写c++代码来...

    一道数学题引发的思考作文.doc

    这篇文档实际上是一个关于数学问题和思考的故事,涉及的数学知识点主要集中在几何学,特别是立体几何中的多面体。故事讲述了美国一次数学能力测验中的一道题目,这道题目涉及到了一个三棱锥和一个正四棱锥的重叠问题...

    由ChatGPT引发中医智能诊断研究中数据问题的思考.pdf

    因此,建立一个全面、多样化的中医数据集是必要的,这包括病史记录、脉象分析、舌象图片等。 同时,数据的质量直接影响到诊断的准确性。中医的诊断过程涉及复杂的辨证论治,需要高质量、结构化的数据来支持推理。...

    对非典所引发法律问题的思考.docx

    【标题】:对非典所引发法律问题的思考 【描述】:文章探讨了非典时期法律面临的挑战,包括紧急强制行为的法律属性、政府的法律责任以及公民的权利和义务。 【标签】:解决方案 【正文】: 在2003年的非典(SARS)...

    转——从拿破仑称帝看中西方皇帝的差异——一个课堂提问引发的思考.docx

    转——从拿破仑称帝看中西方皇帝的差异——一个课堂提问引发的思考.docx

    京东物流仓储管理的问题与对策思考.zip

    《京东物流仓储管理的问题与对策思考》 ...综上所述,京东物流仓储管理的问题与对策是一个持续改进的过程。通过深入分析问题,采取有效的解决方案,京东物流有望进一步提升服务质量,巩固其在电商领域的竞争优势。

    幼儿园食品安全问题引起的思考.docx

    此事件引发了对幼儿园食品安全的深入思考和讨论。 《侵权责任法》在此类事件中的应用表明,幼儿园必须对其学生的人身安全负责。如果儿童在幼儿园遭受人身损害,无论原因如何,幼儿园通常需要承担责任,除非能证明已...

    促进学生深度学习的“问题链”设计与思考——以“1.6尺规作图”一课为例.pdf

    衔接性原则要求问题之间具有内在的关联性,前一个问题应能为后一个问题做铺垫,通过解决前一个问题的知识积累,指引学生解决后面的问题。 在《尺规作图》课程中,问题链的设计围绕尺规作图的概念和操作展开,包括...

Global site tag (gtag.js) - Google Analytics