publicabstractclassA {

inti=1;

publicvoidprintI() {

System.out.println("i="+i);

}

}

publicclassB  extneds A{

inti=2;

publicstaticvoidmain(String[] args) {

B b=newB();

b.printI();

}

}

那么,控制台打出来的i的值是多少?

呵呵,如果一下功夫就能说出正确结果1,那么,下面部分就不需要往下看了。

1、类的继承知识点

(1)java不支持多重继承,也就是说子类至多只能有一个父类

(2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法

(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承

(4)子类中定义的成员方法,并且这个成员方法的名字,返回类型,及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。

2、答案是2者如是说

子类B中的变量i和父类A中的变量i重名, 那么子类B中的变量i将会覆盖掉父类中的同名变量i. 则访问父类中的变量时jvm会把子类cast到父类.所以,打印出的结果应该是“i=2”;

3、歧义的产生

歧义的产生最关键的地方是子类B中的变量i将会覆盖掉父类中的同名变量i的覆盖两个字。这里,我觉得这两个字容易误导。应该改为屏蔽或隐藏。因为在这里父类的成员变量是没有被改变。

4、jvm的执行过程

(1)子类B 的构造方法被调用,实例化一个B对象,B对象的成员被初始化

(2)jvm隐含的调用父类的构造方法,实例化一个A对象,A对象的成员被初始化。

(3)由于A对象的printI()未被屏蔽,所以调用的A对象的printI()函数。

那么,在这里A的成员函数当然是访问自己的成员变量了。

5、super关键字

super关键字在java中的作用是使被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被屏蔽的成员变量和成员成员方法。super是用在子类中,目的是访问直接父类中被屏蔽的成员。上面的代码也可以这样写:

Java代码

publicabstractclassA {

inti=1;

publicvoidprintI() {

System.out.println("i="+i);

}

}

publicclassBextendsA{

publicinti=2;

publicvoidprintI(){

super.printI();

}

publicstaticvoidmain(String[] args){

B b=newB();

b.printI();

}

}

注:

JVM实例化程序的过程中,若对子类进行实例化,必然要对父类的构造器进行实例化继承。

C exteds D{}

C c = new C();

构造器,采取先父后子的关系。

而方法,若调用的方法为子类所覆盖,则主动调用儿子的方法,因为此时,已经继承了父类所拥有的

相关变量,而方法行为,子类具有相对来说的独立性,可以独立调用。

D c = new C();

JV处理过程,也是如此。

先继承D的构造器(基因),再加载C独自的构造器,同时,对相关方法进行相应的调用。

java子类继承父类变量_JAVA子类继承父类相关推荐

  1. java 子类重定义变量_java子类对象和成员变量的隐写方法重写

    1.子类继承的方法只能操作子类继承和隐藏的成员变量名字类新定义的方法可以操作子类继承和子类新生命的成员变量,但是无法操作子类隐藏的成员变量(需要适用super关键字操作子类隐藏的成员变量.) publ ...

  2. java 子类 父类 转换_Java子类与父类之间的类型转换

    1.向上转换 父类的引用变量指向子类变量时,子类对象向父类对象向上转换.从子类向父类的转换不需要什么限制,只需直接蒋子类实例赋值给父类变量即可,这也是Java中多态的实现机制. 2.向下转换 在父类变 ...

  3. java根据父类找子类_在java中实现多态时,可以通过父类变量引用子类的对象。_学小易找答案...

    [单选题]对于字符串s="java",下面哪个选项返回字符在字符串中'v'的位置( ). [简答题]汽车核保的主要内容 [判断题]在java中产生子类对象时,直接调用子类的构造方法 ...

  4. java子类继承父类实例_Java子类继承父类详解

    别和我说你真的懂了继承,先来看下面的代码,回答出我的问题再说 代码很简单,如下: 父类: public class T { public void run() { System.out.println ...

  5. java 调用父级方法_java子类调用父类的方法是什么

    java子类调用父类的方法:1.子类的对象调用方法时,会首先在子类中查找,如果子类中没有该方法,再到父类中查找:2.如果该方法中又调用了其他方法,那么还是按照之前的顺序,先在子类中查找,再在父类中查找 ...

  6. java 继承接口语法_java的继承、接口方面的语法及知识

    继承(inheritance):一个类只能继承一个类 代码复用 继承的语法: class ChildClass extends ParentsClass{ } 父类的属性子类中都存在,只是有没有权限访 ...

  7. java继承circle类_java的继承

    我总是记不住继承是怎么个机制,今天我来彻底的总结一下. 先了解一下初始化的顺序 当程序执行时,需要生成某个类的对象,java执行引擎会先检查是否加载了这个类,如果没有加载,则先执行类的加载再生成对象, ...

  8. Java怎么用继承回复信息_JAVA面向对象-继承

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Java继承: 1.继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类.继承可以理解为一个对象从另一个对象获取属性的过程. 2.如果类 ...

  9. java继承和多态_Java基础继承与多态

    Java基础第九天 继承概述 引入 首先我来写两个代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15//定义学生类 class Student { public void  ...

  10. java 继承的好处_java关于继承的好处

    继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父 ...

最新文章

  1. 对Tensor进行变换 class torchvision.transforms.Normalize(mean, std) 给定均值:(R,G,B) 方差:(R,G,B),将会把Tensor正则化
  2. 在不重装XP系统,增加系统盘剩余空间
  3. practical rendering and computation with dx11 ebook
  4. wegame饥荒一直连接中_腾讯WeGame注册用户超3亿 国产游戏销量超500万
  5. LwIP应用开发笔记之四:LwIP无操作系统TFTP服务器
  6. 可信云十年,重磅研究成果与2021云计算十大关键词悉数发布
  7. SOCKET聊天室字符界面版
  8. oracle视图无法使用rowid,请问:无法从没有键值保存表的连接视图中选择 ROWID 这个是什么原因啊?...
  9. 微课|Python程序设计开发宝典(5.1.2节):嵌套函数定义2
  10. jieba源码分析(一)
  11. 服务器硬件工程师从入门到精通_硬件工程师必阅--如何“0基础”从入门到精通?(附CAD使用指南)...
  12. html5做开心消消乐源代码,html开心消消乐源码
  13. Python 爬虫案例(一)
  14. python实现输出日历_python实现输入日期打印日历
  15. mac 字幕生成工具
  16. 【c语言】两个队列实现一个栈
  17. 给出一个不多于五位的正整数,求出它是几位数
  18. Vue.js 实现简易购物车(商品的增加删除,价格的小计和总计)
  19. Verilog四位全加器
  20. SQL48 将所有获取奖金的员工当前的薪水增加10%

热门文章

  1. html5 手机剪切板,H5页面在手机端如何实现复制粘贴板功能
  2. 修改网页logo图片
  3. 无线网络的几种认证与加密方式
  4. 艾泰(UTT)WiFi短信验证:无线上网热点短信认证设置流程
  5. 分段插值法 | 分段线性插值 + 分段抛物插值
  6. dicards qualifiers
  7. Vue中使用axio跨域请求外部WebService接口
  8. Qt程序的国际化支持【收藏】
  9. 光明顶短信支付:BASE64编码
  10. Python 爬取所有51VOA网站的Learn a words文本及mp3音频