`

Java继承中的"陷阱"问题

    博客分类:
  • Java
阅读更多

对于大都数Java初学者认为:子类可以继承父类中访问权限设定为public 、protected、default的成员变量和方法,但是不能继承访问权限为private的成员变量和方法。其实这个一个误区,下面来根据例子分析一下:

 

    父类代码:

public class A
{
    private String a;
    private String b;
    private String c;

    public A()
    {
        setA("a");
        setB("b");
        setC("c");
    }

    public String getA()
    {
        return a;
    }

    public void setA(String a)
    {
        this.a = a;
    }

    public String getB()
    {
        return b;
    }

    public void setB(String b)
    {
        this.b = b;
    }

    public String getC()
    {
        return c;
    }

    public void setC(String c)
    {
        this.c = c;
    }

    @Override
    public String toString()
    {
        return "A [a=" + a + ", b=" + b + ", c=" + c + "]";
    }

}

   子类代码:

public class B extends A
{
    public B()
    {
        setA("A");
        setB("B");
        setC("C");
    }

    @Override
    public String toString()
    {
        return "B [a=" + getA() + ", b=" + getB() + ", c=" + getC() + "]";
    }
}

   测试代码:

public class Test
{

    public static void main(String[] args)
    {
        A a = new A();
        B b = new B();
        System.out.println(a);
        System.out.println(b);
    }

}

   看完上面代码你认为结果是怎样的呢?

    A [a=A, b=B, c=C]

    B [a=A, b=B, c=C]

    或

    A [a=a, b=b, c=c]

    B [a=A, b=B, c=C]

 

    正确答案是:

    A [a=a, b=b, c=c]

    B [a=A, b=B, c=C]

 

原因:子类可以继承父类中除构造方法以外的所有方法和属性,只是私有的方法和属性都不能直接访问(相当于隐式继承),但是可以间接访问,如私有属性可以通过get、set方法进行间接访问,私有方法可以利用反射机制进行间接访问。

 

下面是调试和运行结果:


 
 

 



 

转载请注明出处: http://xieke90.iteye.com/blog/2260799

 

  • 大小: 8.4 KB
  • 大小: 24.4 KB
  • 大小: 27 KB
5
7
分享到:
评论

相关推荐

    java解惑(+Java 解惑你知多少)

    Bloch和Gafter继承了Effective Jaya一书的传统,深入研究了Java编程语言及其核心类库的细微之处。本书特写了95个噩梦般的谜题,中间穿插着许多有趣的视觉幻象,寓教于乐。任何具备Java知识的人都可以理解这些谜题,...

    10个java主题

    10个JAVA主题,Item 1: 什么... 避免落入隐藏变量成员的陷阱 Item 7: 提前 Item 8: 设计可继承的构造函数 Item 9: 通过引用传递基本类型 Item 10: 布尔运算符与短路运算符本

    如何在Java中避免equals方法的隐藏陷阱(上)

    如果这篇文章是一份Java程序员的入职笔试,那么不知道有多少人会掉落到这样的陷阱中。  摘要  本文描述重载equals方法的技术,这种技术即使是具现类的子类增加了字段也能保证equal语义的正确性。  在...

    Java陷阱一箩筐.doc

    第一,谈谈final, finally, finalize的区别。最常被问到。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? ...... ......

    浅析JavaScript原型继承的陷阱

    构造器结合this,new可以构建出类似Java的类。因此,JavaScript通过扩展自身能模拟类式(class-based)继承。 JavaScript和其它面向对象语言一样,对象类型采用引用方式。持有对象的变量只是一个地址,而基本类型数据...

    开题报告-基于Java的坦克大战游戏的设计与实现.doc

    面向对象技术的核心是以更接近人类思维的方式建立计算机逻辑模型,它利用 类和对象的机制将数据与其上的操作封装在一起,并通过统一的接口与外界交互,使反 映现实世界实体的各个类在程序中能够独立、自治、继承;...

    java编程第八讲----多态

    陷阱:置换私有方法 3、抽象类与抽象方法 4、构造方法与多态 构造方法的调用顺序 继承和清除 构造方法中多态方法的行为 5、利用继承设计 纯粹继承与扩展 向下类型转换及运行时类型辨识

    突破程序员基本功的16课.part2

    4.4.5 避免在经常调用的方法、循环中创建Java对象 4.4.6 缓存经常使用的对象 4.4.7 尽量不要使用finalize方法 4.4.8 考虑使用SoftReference 4.5 小结 第5课 表达式中的陷阱 5.1 关于字符串的陷阱 5.1.1 JVM...

    C++大学教程,一本适合初学者的入门教材(part1)

    2.22 有关对象的思考:确定问题中的对象 小结 术语 自测练习 自测练习答案 练习 第3章 函数 3.1 简介 3.2 C++程序组件 3.3 数学函数库 3.4 函数 3.5 函数定义 3.6 函数原型 3.7 头文件 3.8 随机数产生器 ...

    软件框架设计的艺术

    11.3.2 Java Monitors中的陷阱 193 11.3.3 触发死锁的条件 196 11.3.4 测试死锁 201 11.3.5 对条件竞争进行测试 204 11.3.6 分析随机故障 206 11.3.7 日志的高级用途 208 11.3.8 使用日志记录...

    vs没报错leetcode报错-AndroidInterview:Android面试的代码示例

    Android面试的基本计划和一些典型问题和代码示例。 最新更新:2021.06.25 以往的经验 告诉我们你自己和你以前的经历。 你之前工作的项目是什么? 你在这个项目中扮演了什么角色? 你参与了项目的哪一部分? 你有什么...

    C++大学教程,一本适合初学者的入门教材(part2)

    2.22 有关对象的思考:确定问题中的对象 小结 术语 自测练习 自测练习答案 练习 第3章 函数 3.1 简介 3.2 C++程序组件 3.3 数学函数库 3.4 函数 3.5 函数定义 3.6 函数原型 3.7 头文件 3.8 随机数产生器 ...

    javaweb开发源码-javascript_the_weird_parts:Javascript是现代开发人员需要知道并且非常了解的语言。真

    在本课程中,您将对Javascript有深入的了解,了解Javascript是如何在幕后工作的,以及该知识如何帮助您避免常见的陷阱并极大地提高调试问题的能力。 您会在某些部分中清楚地看到其他人,甚至是经验丰富的编码人员,...

    Ajax基础教程(扫描版)

    5.7.3 javascript中基于类的继承 148 5.7.4 汇合 149 5.8 小结 152 第6章 使用jsunit测试javascript代码 155 6.1 javascript提出的问题 155 6.1.1 测试先行方法介绍 155 6.1.2 junit介绍 157 6.2 分析jsunit ...

    Node.js 开发指南.pdf

    1.5.2 Java与Javascript 7 1.5.3 微软的加入——JScript 8 1.5.4 标准化——ECMAScript 8 1.5.5 浏览器兼容性问题 9 1.5.6 引擎效率革命和JavaScript的未来 9 1.6 CommonJS 10 1.6.1 服务端JavaScript...

    qm_angular_styleguide:QMágicoJava和AngularJS样式指南

    Java脚本AngularJS重要的是要知道的(从javascript) Javascript是一种我们通常“用力推肚子”的语言,它学习获得所需结果所需的最低限度的知识。 好吧,这个故事结束了:-) 请确保您了解该语言的工作原理,包括最高...

    Node.js+开发指南

    1.5.2 Java与Javascript 7 1.5.3 微软的加入——JScript 8 1.5.4 标准化——ECMAScript 8 1.5.5 浏览器兼容性问题 9 1.5.6 引擎效率革命和JavaScript的未来 9 1.6 CommonJS 10 1.6.1 服务端...

    网管教程 从入门到精通软件篇.txt

    除非您访问驱动器有问题,否则不要继续进行。向系统分区写入新的主引导记录可能破坏分区表并导致分区无法访问。  format  将指定的驱动器格式化为指定的文件系统。含有下列参数的 format 命令仅在使用故障恢复...

Global site tag (gtag.js) - Google Analytics