A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hello_csu 中级黑马   /  2014-12-2 21:52  /  1311 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hello_csu 于 2014-12-2 22:38 编辑

         Java中关于继承的概念给初学者来说比较绕口,不那么容易让人理解。这里从静态与非静态做说明:        1,静态变量与方法是为对象类所有,不属于任何对象,所以静态的方法与变量时不可以继承的。
        2,非静态的过程中才存在继承关系,其实质体现在对方法的访问上。
         因1理解起来比较容易,所以这里主要对2点做详细的分析。有如下形式的继承关系,其中Child为Parent的子类,其具体代码如下:
  1. package OrnamentalGarden;

  2. import java.lang.*;

  3. class Parent{
  4.         public int i = 4;
  5.         private int j = 5;        
  6.         Parent() {
  7.                 System.out.println("Create Object Parent.i="+i);
  8.         }
  9.         public int getValue() {
  10.                 return i;
  11.         }
  12.         public void SetValue(int i){
  13.                 this.i = i;
  14.         }
  15.         public void SetValue( ) {
  16.         i = i+j;
  17.         }
  18. }
  19. class Child extends Parent {
  20.         public int i =5;
  21.         Child(){
  22.                 System.out.println("Create Object Child.i="+i);
  23.         }
  24.         public void SetValue(int i){
  25.                 this.i = i;
  26.         }
  27. }
  28. public class InheritationDemo {

  29. public static void main(String[] args) {
  30.                   // TODO 自动生成的方法存根
  31.            Parent child = new Child();
  32.            child.SetValue(8); //case1
  33.            ((Child)child).SetValue(); //case2
  34.            System.out.println("Run Child.getValue:"+(((Child)child).i));
  35.            System.out.println("Run Parent.getValue:"+((Child)child).getValue()); //case3

  36.         }
  37. }
复制代码
Output Result:Create Object Parent.i=4
                             Create Object Child.i=5
                             Run Child.getValue:8
                             Run Parent.getValue:9
         通过该运行结果分析可以得到如下结论:
         1, 父类与子类之间的构造函数之间不存在继承关系,那么如果非缺省情况必须在子类构造函数中去调用父类构造函数,这样子也就导致了父类的初始化会优先于子类。
         2, 在构建子类对象时候,其真正的对象结构图如下:
               
                从这里看出如下结论:
                1,子类和父类中的成员变量时不存在任何继承关系,其都是独立存在的。
                 2,子类中含有父类中所有的信息,这也解释为什么子类可以向上转换为父类,且子类覆盖父类的方法后,该方法的作用域是指向子类的,这样子能够实现多态的提供了理论基础。
                总之,继承关系实际上体现上在对方法的访问形式上,只有覆盖的方法其作用域都是为子类,其他方法就是来自于哪儿就作用域所来自的类。


1 个回复

倒序浏览
很受用 谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马