当前位置:  技术问答>java相关

请大家给分析一段代码,高分请教

    来源: 互联网  发布时间:2017-03-21

    本文导语:  class Base { int i; Base() { add(1); } void add(int v) { i += v; } void print() { System.out.println(i); } } class Extension extends Base { Extension() { add(2); } void add(int v) { i += v*2; } } public class jtest { public static void main(String args[]) ...

class Base {
int i;
Base() {
add(1);
}
void add(int v) {
i += v;
}
void print() {
System.out.println(i);
}
}
class Extension extends Base {
Extension() {
add(2);
}
void add(int v) {
i += v*2;
}
}
public class jtest {
public static void main(String args[]) {
bogo(new Extension());
}
static void bogo(Base b) {
b.add(8);
b.print();
}
}
给出结果,并解释之

|
22吧,i应该被初始化成0,先是
Base() {
add(1);
}
然后i=2
Extension() {
add(2);
}
在i=6
class Extension extends Base {
void add(int v) {
i += v*2;
}
}
i=22

|
Example:
A extends B;B extends C

程序运行顺序:C中的interface/static-->B中的interface/static-->A中的interface/static-->C中的instance variable/constructor-->B中的instance variable/constructor-->A中的instance variable/constructor-->A中的main()

里面还有更深的概念,自己写程序去试:System.out.println("check: "+ variable):

|
结果是:22
Extension类从Base类继承了i,但覆盖了add方法,所以两个类中的i是同一个。
在jtest类中,new Extension()创建了一个新的子类对象,首先执行父类的构造方法,其中的方法add指的是子类的add(多态性),i变成2,再执行子类的构造方法,i变成6
然后并作为参数传递给方法bogo,bogo的参数是Base类的(把子类对象的引用赋给了参数b)
b.add(8)调用的是子类的add方法,因此为22


|
主要是 1.构建器的初始化顺序:父类构建器->子类构建器
        2.方法覆盖:在类Base中add(int v)方法被覆盖

|
流程是这样的,先初始化
static void bogo(Base b) {
b.add(8);
b.print();
}
然后才开始main()方法,但当bogo方法调用到 Base类的变量时,又要先初始化Base类,然后在类推,太烦了,你自己推吧!

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java/j2ee iis7站长之家
  • Linux源代码哪本书分析的好一点??
  • 请问哪一本LINUX源代码分析的书比较经典?
  • 请介绍几本分析Linux源代码的好书,谢谢!
  • C代码分析工具 Frama-C
  • Linux源代码的分析!!!!
  • Java代码覆盖测试分析工具 Clover
  • 有同志读过《linux原代码情景分析》吗?
  • 源代码管理分析工具 Source Navigator
  • 哪本linux源码分析的书里详细讲解了Linux的核心启动代码
  • C/C++代码静态分析插件 SourceInsight_Scan
  • Java代码Bug分析插件 FindBugs
  • C++代码分析器 CppCat
  • 哪里有LINUX源代码分析的文章吗?万分紧急!
  • C/C++代码分析工具 cppcheck
  • 应该怎样学《莱昂氏UNIX源代码分析》
  • 哪里能够下载《Linux 内核源代码情景分析》,100分相送
  • 请问关于syslog工作原理和源代码分析的资料
  • 求《Linux内核代码情景分析》电子版
  • 有谁对nagios 的原代码做过分析的,给小弟点帮助啊
  • HASH查找的程序实现及性能分析
  • 如何获取shell词法分析,语法分析及解释器的内容和信息
  • http协议介绍,文件上传分析及程序举例
  • 两台机器同时出现同样的故障,有人能帮分析分析吗?
  • linux下free命令显示的内存使用情况分析
  • 我想编程分析任意一个java文件,把其中的注释部分删掉,请帮我分析一下思路和方法好吗?
  • Linux下时钟同步问题:Clock skew detected原因分析及解决方法
  • 如何分析linux宕机原因(或者说如何通过查日志分析宕机原因)
  • Docker支持更深入的容器日志分析
  • Python的词法分析与语法分析
  • mongodb的优点和缺点详细分析


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3