父类的构造方法中调用了方法,当创建子类对象时程序执行的过程

写出下面程序的运行结果是什么?

public class Dervied extends Base {  
    private String name = "dervied";
    public Dervied() {
//super();  //调用父类的方法,相当于在父类中是父类的引用调用子类的对象
//在父类的构造方法中打印this //sysout(this);   /this.getClass()
//结果class com.persist.test.bigdata.day12.Dervied
//成员变量是由引用确定的,方法是通过动态绑定确定的
        tellName();
        printName();
    }

    public void tellName() {
        System.out.println("Dervied tell name: " + name);
    }

    public void printName() {
        System.out.println("Dervied print name: " + name);
    }

    public static void main(String[] args){ 
        new Dervied();   // ①
//  1.执行父类的构造方法  2.给自己的成员变量赋值   3。调用构造方法中的调用的方法    
    }
}

class Base { 
    private String name = "base";
    public Base() {
        tellName();
        printName();
//sysout(this);
    } 
    public void tellName() {
        System.out.println("Base tell name: " + name);
    } 
    public void printName() {
        System.out.println("Base print name: " + name);
    }
}

Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied

为了解释这个程序,首先需要澄清一个概念,java对象是由构造器创建的吗?很多书籍,资料中会说是,但实际情况是:构造器只负责对java对象实例变量执行初始化,在执行构造器之前,该对象所占的内存已经被分配下来了,这些内存的值都默认是空值 ——对与基本类型的变量,默认的空值是0或者是false,对于引用类型而言就是null;当程序执行①代码时,系统先为Derived对象分配内存空间,有两块内存空间分别存放Derived对象的两个i实例变量,一个是属于Base的一个是Derived的,此时这两个i实例变量的值都是0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值