动手动脑4

动手实验1继承条件下的构造方法调用

 

 

 

结论:通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句

思索:为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来

结论:构造函数用来初始化对象,子类继承了父类的成员变量和方法,构造顺序是先有父类对象才能构造子类对象,否则先决条件不满足,就不能构造子类。反过来不行,因为父类不知道你子类中有什么,就不能进行构造。

运行以下代码:

class Parents{

    public int myValue=100;

    public void printValue() {

        System.out.println("Parent.printValue(),myValue="+myValue);

    }

}

class Childs extends Parents{

    public int myValue=200;

    public void printValue() {

        System.out.println("Child.printValue(),myValue="+myValue);

    }

}

public class ParentChildTextss{

    public static void main(String[] args) {

        Parents parent=new Parents();

        parent.printValue();;

        Childs child=new Childs();

        child.printValue();

       

        parent=child;

        parent.printValue();

       

        parent.myValue++;

        parent.printValue();

       

        ((Childs)parent).myValue++;

        parent.printValue();

       

    }

}

结果:

 

 

总结:

当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。

如果子类被当作父类使用,则通过子类访问的字段是父类的!

posted @   chenghaixinag  阅读(55)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示