本帖最后由 hello_csu 于 2014-12-2 22:38 编辑
Java中关于继承的概念给初学者来说比较绕口,不那么容易让人理解。这里从静态与非静态做说明: 1,静态变量与方法是为对象类所有,不属于任何对象,所以静态的方法与变量时不可以继承的。
2,非静态的过程中才存在继承关系,其实质体现在对方法的访问上。
因1理解起来比较容易,所以这里主要对2点做详细的分析。有如下形式的继承关系,其中Child为Parent的子类,其具体代码如下:- package OrnamentalGarden;
- import java.lang.*;
- class Parent{
- public int i = 4;
- private int j = 5;
- Parent() {
- System.out.println("Create Object Parent.i="+i);
- }
- public int getValue() {
- return i;
- }
- public void SetValue(int i){
- this.i = i;
- }
- public void SetValue( ) {
- i = i+j;
- }
- }
- class Child extends Parent {
- public int i =5;
- Child(){
- System.out.println("Create Object Child.i="+i);
- }
- public void SetValue(int i){
- this.i = i;
- }
- }
- public class InheritationDemo {
- public static void main(String[] args) {
- // TODO 自动生成的方法存根
- Parent child = new Child();
- child.SetValue(8); //case1
- ((Child)child).SetValue(); //case2
- System.out.println("Run Child.getValue:"+(((Child)child).i));
- System.out.println("Run Parent.getValue:"+((Child)child).getValue()); //case3
- }
- }
复制代码 Output Result:Create Object Parent.i=4 Create Object Child.i=5 Run Child.getValue:8 Run Parent.getValue:9 通过该运行结果分析可以得到如下结论: 1, 父类与子类之间的构造函数之间不存在继承关系,那么如果非缺省情况必须在子类构造函数中去调用父类构造函数,这样子也就导致了父类的初始化会优先于子类。 2, 在构建子类对象时候,其真正的对象结构图如下: 从这里看出如下结论: 1,子类和父类中的成员变量时不存在任何继承关系,其都是独立存在的。 2,子类中含有父类中所有的信息,这也解释为什么子类可以向上转换为父类,且子类覆盖父类的方法后,该方法的作用域是指向子类的,这样子能够实现多态的提供了理论基础。 总之,继承关系实际上体现上在对方法的访问形式上,只有覆盖的方法其作用域都是为子类,其他方法就是来自于哪儿就作用域所来自的类。
|