项目开发遇到一个问题,稀里糊涂给实现了,现在重点讨论一下这是个什么情况,大神们如果看到希望给点指点。

  问题:子类与父类具有相同的属性和方法,将子类实例化为父类,调用对应属性的get、set方法,打印出的信息显示了,子类的属性值,请问这是什么原因?

代码如下--父类:

public class Freath {

    private int a = ;

    public int getA() {
return a;
} public void setA(int a) {
this.a = a;
} }

子类A:

public class A extends Freath{
private int a = ; public int getA() {
return a;
} public void setA(int a) {
this.a = a;
} }

子类B:

public class B extends Freath{
private int a = ; public int getA() {
return a;
} public void setA(int a) {
this.a = a;
}
}

测试类:

public class Test {

    public static void main(String[] args) {
Freath fa = new A();
Freath fb = new B();
System.out.println(fa.getA()+"");
System.out.println(((A) fa).getA()+"");
System.out.println(fb.getA()+"");
System.out.println(((B) fb).getA()+"");
} }

输出结果:

  

  首先这样的结果,确实是我想要的,不过对于里面的具有逻辑,甚是不解,还望能得到指点。

  对于上面的情况我又进行了一下修改,打印出的结果就完全变了:

父类:

public class Freath {

    private int a = ;

    public int getA() {
return a;
} public void setA(int a) {
this.a = a;
} }

子类A:

public class A extends Freath{
private int a = ; // public int getA() {
// return a;
// }
//
// public void setA(int a) {
// this.a = a;
// } }

子类B:

public class B extends Freath{
private int a = ; // public int getA() {
// return a;
// }
//
// public void setA(int a) {
// this.a = a;
// } }

测试类:

public class Test {

    public static void main(String[] args) {
Freath fa = new A();
Freath fb = new B();
System.out.println(fa.getA()+"");
System.out.println(((A) fa).getA()+"");
System.out.println(fb.getA()+"");
System.out.println(((B) fb).getA()+"");
} }

结果:

  

  对于这两种情况的产生,我的理解是,第一种情况属于:父类的属性是私有的,子类无法继承,父类的属性方法是公开的,子类可以进行继承重写,之所以出现上面的情况,就是父类进行相当于一个提供调用子类方法的入口,子类重写这些方法后,当调用时,便打印出了子类的属性值。第二种情况则是由于父类的属性是私有的,子类无法进行继承,子类继承了父类的方法,但没有进行重写,所以调用时,便将父类的信息打印出来了。

JAVA--继承的更多相关文章

  1. Java继承与组合

    Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...

  2. JAVA继承时构造函数的问题

    今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan ...

  3. Java继承和接口

    接口最关键的作用,也是使用接口最重要的一个原因:能上溯造型至多个基础类.使用接口的第二个原因与使用抽象基础类的原因是一样的:防止客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一 ...

  4. Java继承的初始化

    /** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...

  5. Java—继承、封装、抽象、多态

    类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...

  6. java继承关系中成员变量,构造方法,成员方法的关系

    Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单写那个名字就访问那个名字! b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子 ...

  7. JAVA继承时this和super关键字

    JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...

  8. JAVA 继承中的this和super

    学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云.只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键 ...

  9. java 继承、重载、重写与多态

    首先是java 继承.重载和重写的概念 继承: 继承的作用在于代码的复用.由于继承意味着父类的所有方法亦可在子类中使用,所以发给父类的消息亦可发给衍生类.如果Person类中有一个eat方法,那么St ...

  10. Java 继承中构造方法的执行顺序问题

    在Java中,如果一个类没有任何显式创建的构造器则该类默认会有一个无参构造器:如果显式创建了有参构造器则该类就不再有默认无参构造器. 在Java继承中,构造器并不能被继承,而是被显示或隐式调用. 1. ...

随机推荐

  1. STM32之DAC君

    如花说得好:呃呃呃.是俗话说得好:有了ADC,怎可少了DAC..我觉得奇怪.今天我开头就直奔主题了.我想了想,总结了一句话:孙悟空纵然有七十二变.无论是变成猫也好,变成狗也罢.始终还是会变回他本身.所 ...

  2. Spark源码编译并在YARN上运行WordCount实例

    在学习一门新语言时,想必我们都是"Hello World"程序开始,类似地,分布式计算框架的一个典型实例就是WordCount程序,接触过Hadoop的人肯定都知道用MapRedu ...

  3. JavaIO 将数据写入到文件中去

    package com.Practice_FileWriter; import java.io.FileWriter; import java.io.IOException; public class ...

  4. HW2016_字符串_STL_DP

    一.在字符串str1中删除那些在str2中出现的字符. str2可能会有重复字符,直接遍历会导致效率低下,故先借助STL的set容器对str1查重: 然后,遍历str1和str2,对str1进行查重. ...

  5. android——相对布局,表格布局

    1.相对布局 RelativeLayout 又称作相对布局,也是一种非常常用的布局.和LinearLayout 的排列规则不同,RelativeLayout 显得更加随意一些,它可以通过相对定位的方式 ...

  6. 【实战Java高并发程序设计6】挑战无锁算法:无锁的Vector实现

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  7. easyUI datagrid 根据查询条件 选中对应数据的行

    开始 输入了 土豆,南瓜,再次是小青菜,每次输入点击搜索的时候(模糊查询),选中的当前数据对应的行 在做之前,在网上查询了许多资料,也在技术群里问过许多次,弄了好久终于好了. 第一次写博客真不知道写啥 ...

  8. Navsion二次开发_学习笔记

    CodeUnit Note   This feature is documented in the Navision Application Server Technical White Paper. ...

  9. linux查看发行版本

    redhat系 cat /etc/redhat-release 其他 lsb_release -a

  10. TCP/IP, WebSocket 和 MQTT

    按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP和MQTT是应用层的协议.在这三者之间, TCP是HTTP和MQTT底层的协议.大家对HTTP很熟悉,这里简要介绍下MQTT.M ...