java父类的父类问题,没看懂

最近看java父类突然有一个基础的问題迷惑我很久于是就引深一下也不知道分析是否正确和大家分享不对之处还望多多指教:

1.子类调用父类是引用吗?

2.多个子类引用的是同┅个父类吗

3.如果子类修改了父类的属性值, 对其他子类有影响的吗

4.假如一个父类 有 3个不同的子类,那么编译完成后实际上有几个父類的对象在jvm中(换句话,是一个子类对应一个父类还是多个子类对应一个父类)

1. 在java父类中, 除了基本数据类型其余的都是引用, 所以這里子类调用父类肯定是引用了!

2.多个子类调用的是同一个父类 我们在java父类代码中可以,计算出来父类的hashcode值 会发现是一样的!

3. 如果子類修改了父类的对象的属性或者方法, 肯定不会对其他子类有影响了;

       子类修改了父类类方法:知道java父类 的都知道有覆盖 这个特性 这就昰典型的覆盖, 如果有影响 那这就不是java父类 的特性了,就是java父类 的bug 了;

4. 如果有多个子类那么在编译完成后会生成和子类一样多的父类嘚实例,因为每一个子类是编译的时候都会有自己的一个父类引用!

        这里还会牵扯到一个引用问题: 那就是我们在写代码的时候,我们呮写了一个父类 在子类继承父类的时候, 我们有多个子类的时候 继承的同一个父类吗? 上边已经回答过是同一个那么不同子类修改叻父类的属性值,应该会影响到其他子类才对这里引用《java父类编程思想》中的一句话:

 为了方便理解,所以多引用些 :

由于这儿涉及到兩个类——基础类及衍生类而不再是以前的一个,所以在想象衍生类的结果对象时可能
会产生一些迷惑。从外部看似乎新类拥有与基础类相同的接口,而且可包含一些额外的方法和字段但继
承并非仅仅简单地复制基础类的接口了事。创建衍生类的一个对象时它在其中包含了基础类的一个“子对
象”。这个子对象就象我们根据基础类本身创建了它的一个对象从外部看,基础类的子对象已封装到衍苼
当然基础类子对象应该正确地初始化,而且只有一种方法能保证这一点:在构建器中执行初始化通过调
用基础类构建器,后者有足夠的能力和权限来执行对基础类的初始化在衍生类的构建器中,java父类 会自动插
入对基础类构建器的调用

对于以上这句话可以比较理解可能更容易些:

我们更具java父类可以想想如果要在一个类中引用其他的类中的属性和方法应该怎么做, 正常我们使用的是“组合”(即在这個类中new 出其他类型的 属性)

我们也可以采用 继承的方式:

我们在理解组合的时候比较容易理解在jvm编译cat2 这个类的时候, 我们肯定知道animal 作為cat2 的属性引用被编译的cat2 中了(即: Fields_count 中), 那么继承在编译的时候是怎么找到这个animal 呢 在编译cat的时候, 他会首先找到 看 animal是否被编译编译之後就会cat中包含一个基础类的”子对象“,(即:Supper_class

进过上述说明:我们可以理解其实不管是组合还是继承, “子类对象”都拥有了“父类對象的一个实例的引用”所以如果你有多个子类的话 jvm 在编译的时候,就会编译出来多个父类实例 而不是我们在写java父类 代码的时候,我們写了一个父类 看来是jvm帮我们把重复的事情做了!

给了2分的技术分的题。。。
我试一试首先,明确一点是子类继承父类
子类里肯定是继承了父类中所有成员,不管它是不是私有
只不过私有不可见,你说子类嘚方法表中没有父类的私有方法对于方法表是第一次听说,
所以无法按照这个思路去给你答案
但是我可以试着按照我的思路父类的方法其实是,有this,和super指针的
当父类的公有方法内部调用父类私有方法时前面其实是引去了this,
那么内部是怎么判断,前面应该加的是this,还是super呢
我個人认为首先是加this,如果this指向的类中有该方法就调用
如果发现this指向的类中没有该方法再加super去父类中找有没有该方法
至于第2个问题,功力尚浅无能为力

我测试的时候  用父类引用和子类引用 没什么区别呀

父类引用不能调用子类的独有方法

父类引用不能调用子类的独有方法

这样的话直接用子类引用子类对象就可以了呀,那个父类引用的用途在哪呢

在这个题目中用途并不大和你直接用子类去引用是一样的,但是用父类的引用去指向子类对象体现了java父类多態的特性

子类引用子类对象这就写死了,考虑一下父类可以派生出多个子类的情况吧说到底还是需要对多态的理解透彻。

我要回帖

更多关于 java父类 的文章

 

随机推荐