JAVA--继承
项目开发遇到一个问题,稀里糊涂给实现了,现在重点讨论一下这是个什么情况,大神们如果看到希望给点指点。
问题:子类与父类具有相同的属性和方法,将子类实例化为父类,调用对应属性的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--继承的更多相关文章
- Java继承与组合
Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...
- JAVA继承时构造函数的问题
今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan ...
- Java继承和接口
接口最关键的作用,也是使用接口最重要的一个原因:能上溯造型至多个基础类.使用接口的第二个原因与使用抽象基础类的原因是一样的:防止客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一 ...
- Java继承的初始化
/** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...
- Java—继承、封装、抽象、多态
类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...
- java继承关系中成员变量,构造方法,成员方法的关系
Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单写那个名字就访问那个名字! b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子 ...
- JAVA继承时this和super关键字
JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...
- JAVA 继承中的this和super
学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云.只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键 ...
- java 继承、重载、重写与多态
首先是java 继承.重载和重写的概念 继承: 继承的作用在于代码的复用.由于继承意味着父类的所有方法亦可在子类中使用,所以发给父类的消息亦可发给衍生类.如果Person类中有一个eat方法,那么St ...
- Java 继承中构造方法的执行顺序问题
在Java中,如果一个类没有任何显式创建的构造器则该类默认会有一个无参构造器:如果显式创建了有参构造器则该类就不再有默认无参构造器. 在Java继承中,构造器并不能被继承,而是被显示或隐式调用. 1. ...
随机推荐
- 导入数据经常使用的SQL语句整理整理
1.事务(基本) GO BEGIN TRY BEGIN TRAN -- 导入数据 COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN END CATCH GO ...
- 【java基础学习】-【泛型】
参考以下几位同学的总结来学习: http://www.cnblogs.com/lwbqqyumidi/p/3837629.html#!comments http://www.weixueyuan.ne ...
- 使用配置文件定义ADO.NET 的连接字符串
最近一直在学习ADO.NET的相关知识,发现要对数据库操作的地方都要先创建一个连接字符串: string constr ="Data Source=(local);Initial Catal ...
- CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate) 在CSS3中,可以利用transform功能来实现文字或图像的旋转.缩放.倾 ...
- 从源代码构建 Go 开发环境
从源代码构建 Go 开发环境 Go 1.5 之前的版本 安装C 语言开发环境 在Go 1.5 之前的版本(比如 1.3.1.4),都会部分的依赖 C 语言的工具链,所以如果你有C 语言的开发环境,就可 ...
- Markdown 语法总结
Markdown 语法总结 Markdown是一个神奇的语言,他比html简单,它巧妙地将内容和格式结合起来.很多平台支持Markdown语法编辑,比如github.博客园等. 下面总结一Markdo ...
- Web服务网站故障分析常用的命令
1.查看TCP连接状态netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn netstat -n | awk ‘/^tcp/ {++S[$NF]}; ...
- String对象方法扩展
/** *字符串-格式化 */ String.prototype.format = function(){ var args = arguments;//获取函数传递参数数组,以便在replace回调 ...
- 【转】GitHub 排名前 100 的安卓、iOS项目简介
GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...
- js判断只能输入数字和只能输入
JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'' ...