java中的继承关系
2006-11-04 20:35
211 查看
以下是我对这段代码的分析
public class Target extends Depend ...{
int i = 30 ;
public Target() ...{
print();
i = 40 ;
}
void print() ...{
System.out.println( " Target=> " + i);
}
public static void main(String[] args) ...{
System.out.println( new Target().i);
}
}
class Depend ...{
int i = 10 ;
public Depend() ...{
print();
i = 20 ;
}
void print() ...{
System.out.println( " Depend=> " + i);
}
}
这段代码 执行的结果是:
Target=> 0
Target=> 30
40
首先 运行的时候 先执行Target的main函数new Target().i 这里要实例化一个Target对象 于是会执行Target的构造函数
public Target() ...{
print();
i = 40 ;
}
但是我们知道 构造函数中有个super();(这个是默认要执行的 因为你要构成一个子类 你必须先有一个父类的实例哦)
public Target() ...{
super();
print();
i = 40 ;
}
那么在执行super();的时候 就会实例话一个父类对象 此时就会给父类的变量分配内存 于是父类的变量i被赋予10,
然后执行父类构造函数中的print()方法 然而子类中也有print()方法 即子类重写(覆盖了)父类的print方法 那么在调用print()的时候 实际是是执行的是子类的print方法 然而此时子类还没实例化 变量i也还没分配内存 其默认值是0,于是打印出 Target=> 0 当print方法执行完了后 接着执行父类构造方法中的给i(父类的i)赋值20 到此 父类已经实例化了 即super()方法执行完毕 开始实例化子类 于是给子类的i分配内存,子类i被赋予30,并且执行super下面的print()方法,打印出 Target=> 30 ,然后在执行i=40给子类的i赋值 到次 子类的构造方法执行完毕 然后就是执行main中的打印子类的i 输出40
以上是个人的分析 如果有什么不对的 请高手指点.
public class Target extends Depend ...{
int i = 30 ;
public Target() ...{
print();
i = 40 ;
}
void print() ...{
System.out.println( " Target=> " + i);
}
public static void main(String[] args) ...{
System.out.println( new Target().i);
}
}
class Depend ...{
int i = 10 ;
public Depend() ...{
print();
i = 20 ;
}
void print() ...{
System.out.println( " Depend=> " + i);
}
}
这段代码 执行的结果是:
Target=> 0
Target=> 30
40
首先 运行的时候 先执行Target的main函数new Target().i 这里要实例化一个Target对象 于是会执行Target的构造函数
public Target() ...{
print();
i = 40 ;
}
但是我们知道 构造函数中有个super();(这个是默认要执行的 因为你要构成一个子类 你必须先有一个父类的实例哦)
public Target() ...{
super();
print();
i = 40 ;
}
那么在执行super();的时候 就会实例话一个父类对象 此时就会给父类的变量分配内存 于是父类的变量i被赋予10,
然后执行父类构造函数中的print()方法 然而子类中也有print()方法 即子类重写(覆盖了)父类的print方法 那么在调用print()的时候 实际是是执行的是子类的print方法 然而此时子类还没实例化 变量i也还没分配内存 其默认值是0,于是打印出 Target=> 0 当print方法执行完了后 接着执行父类构造方法中的给i(父类的i)赋值20 到此 父类已经实例化了 即super()方法执行完毕 开始实例化子类 于是给子类的i分配内存,子类i被赋予30,并且执行super下面的print()方法,打印出 Target=> 30 ,然后在执行i=40给子类的i赋值 到次 子类的构造方法执行完毕 然后就是执行main中的打印子类的i 输出40
以上是个人的分析 如果有什么不对的 请高手指点.
相关文章推荐
- Java继承关系的父子类中相同的成员变量
- Java中继承关系的构造函数的调用顺序
- JAVA经典面试题(二)--如何体现JavaScript的继承关系?
- java继承关系
- 2018/01/07JAVA 基础 / 接口与继承:对接口与实现类、子类与父类的关系の理解
- Java继承中属性、方法和对象的关系
- java实现接口与继承的关系
- Java继承中属性、方法和对象的关系
- java-集合 各个类之间继承关系图
- Java继承中属性、方法和对象的关系
- java基础(八)Math/代码块/继承成员方法指南的关系/继承中成员变量之间的关系/方法的重写/继承中构造方法之间的关系/this和super的区别
- Java中继承关系的实例分析
- java中set,list,Map继承关系图
- Java继承关系的父子类中相同的成员变量
- java 学习笔记——类之间的关系之封装、继承与多态的详解
- Java继承关系、构造器的内存分析
- Java之集合框架 常用接口的继承、实现关系图
- Java的集合类型的继承关系图与Java的I/O流类图的继承图
- Java程序员从笨鸟到菜鸟之(五十五)细谈Hibernate(六)Hibernate继承关系映射
- Java 使用泛型 泛型之间继承关系