java继承中疑惑

为了理清思路,撰写此文

记java中的继承的一些困惑。。。

先上代码

//先定义一个父类
public class Fu {
   
int num = 10;
    public void
method(){
        System.
out.println(num);
   
}
}

//定义子类

public class Zi extends Fu {

    int num = 20;

}
//测试类

public class Test {

    public static void main(String[] args) {

        Zi zi = new Zi();

        zi.method();

    }

}

运行结果是 :10

疑问来了,既然子类继承了父类的方法,按理说子类也应该有个mathod的方法,可是从运行结果上看,显然子类没有,那继承到底继承的是什么呢????

 

到这里了先总结下思路

按照别人经常做的比喻,子类比喻成儿子,一个儿子只能有一个父亲,一个子类也只能有一个父类,但是到这你会发现,这个父亲是多么的尽职,父类不管有多少个子类,他都像猴子一样弄出来多少个分身去和子类在一起,就是每个子类都有一块空间是划分给父类的,假如一个父类有100个子类,那么和上图一样的内存空间就有100份,,好吧,到了这里大概明白,继承只是为了程序员的代码容易编写,其实在虚拟机里面运行的时候并不像程序员写的代码那样只有一个内存然后子类内存去调用(也可能真的是这样,只不过没理解到)。

到了这里了,再来看看构造方法吧,

首先构造方法是无法继承的,疑问点就是,为什么构造方法的第一句都是先调用父类的构造方法???还有调用了父类的构造方法后子类是如何获得的值???

子类的实例化只是把父类的构造器当一个方法去调用的,因为在jvm堆中,一个对象中包含了从父类继承过来的成员变量,实际上没有实例化父类,是为子类中从父类继承的成员变量初始化

上面这段话摘自网上一个大佬的回答,感觉颇为有道理,调用父类的构造方法并没有给子类的什么,只是初始化了和这个子类一起的那个父类分身的成员变量,以方便子类的调用,间接的完成了子类对象的构造,

虽然想法形成了文字,但是总感觉不是很透彻,写的不对的地方还请大佬们多指教

 

猜你喜欢

转载自blog.csdn.net/qq_39413165/article/details/81229440
今日推荐