`
wuzq1223
  • 浏览: 24955 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(转) 父子类之间构造方法执行与调用的问题

    博客分类:
  • java
 
阅读更多
//假定一个子类Sub,继承自父类Super,那么在实例化Sub,也就是new Sub()时,构造方法是怎么执行的呢,下面的代码解释了这些,很重要 

class Super{ 
    static{System.out.println("静态代码块执行...");} 
    {System.out.println("非静态代码块执行...");} 
    public Super(){System.out.println("父类无参构造执行...");} 
    public Super(int test){System.out.println("父类全参构造执行...");} 

class Sub extends Super{ 
    public Sub(){System.out.println("子类无参构造执行...");} 
    public Sub(int test){System.out.println("子类全参构造执行...");} 

class SubTest extends Super{ 
    public SubTest(){//子类无参构造,显调父类有参构造 
        super(1); 
        System.out.println("子类无参构造执行");} 
    public SubTest(int test){ 
        super(1); 
        System.out.println("子类全参构造执行..."); 
    } 

public class Test{ 
    public static void main(String[] args) { 
//      实例化子类,无参构造 
        Sub s=new Sub(); 
         
        //实例化子类,全参构造 
        Sub s1=new Sub(1); 
         
        System.out.println("********华丽分割线********"); 
        //实例化子类,无参构造 
        SubTest ts=new SubTest(); 
         
        //实例化子类,全参构造 
        SubTest ts1=new SubTest(1); 
    } 

输出:

静态代码块执行...
非静态代码块执行...
父类无参构造执行...
子类无参构造执行...
非静态代码块执行...
父类无参构造执行...
子类全参构造执行...
********华丽分割线********
非静态代码块执行...
父类全参构造执行...
子类无参构造执行
非静态代码块执行...
父类全参构造执行...
子类全参构造执行...
也就是,在实例化子类时(当然子类必有父类,不解释),先执行父类的构造方法,如果在子类的构造方法中没有显式调用父类的具体构造,那么编译器会默认执行无参构造

,如果子类的构造中明确了调用的是父类的具体(比如有参有参构造),那么执行的就是父类的那个构造:就是说,子类实例化时,必须执行父类的一种构造(如果没写,或者没指定是哪个父类构造,编译器默认是父类的无参构造),可以显式的调用super([type param])父类的有参构造完成相关的构造需要...依次类推,父类在执行自己的构造时,又会执行父类的父类的构造,一直到Object的构造,恐怖啊...呵呵

听过一种解释比较合理,就是说当你在实例化一个类时,其父类也实例化,其父类的父类也是如此,直到Object,所以会出现构造的向上不停执行直到public Object(){},代码中还写了代码块,java中的代码块分为静态与非静态两种,在演示中可以看出,静态代码块是最先且仅执行一次的代码,非静态代码块,每次随着父类构造之前执行一次...
分享到:
评论

相关推荐

    父子类接口实验

    8. **父子类转换**:在Java中,一个子类对象可以被强制转换为父类类型,但需要注意的是,父类引用只能调用父类的方法,不能调用子类特有的方法。在本实验中,虽然没有直接展示转换操作,但在实际应用中,这种转换...

    父子窗体的调用 c#

    在C#编程中,"父子窗体的调用"是一个常见的功能需求,特别是在开发桌面应用程序时,例如Windows Forms或WPF应用。这个概念涉及到一个窗口(父窗体)如何启动、控制和通信与另一个窗口(子窗体)。下面将详细阐述这一...

    Form1调用Form2 ,From2回传值或调用Form1内的方法。

    这在开发GUI应用程序时尤为常见,例如一个窗体(Form1)打开另一个窗体(Form2),然后Form2执行某些操作并返回结果给Form1,或者调用Form1中的方法。这个过程可以通过多种方式实现,其中一种常见且灵活的方法是使用...

    2023年北京圣思园java课堂笔记.doc

    8. **构造方法调用顺序**:创建子类对象时,会先调用父类的无参构造方法,然后执行子类的构造方法。这是Java初始化过程的一部分。 9. **super关键字**:super用于访问和调用父类的成员,包括构造方法。super()调用...

    C#实现父子窗体全传值案例

    以上就是在C#中使用`ShowModalDialog`实现父子窗体之间全传值的常见方法。实际开发中,你可以根据具体需求选择合适的方式。在这个案例中,可能涉及到了其中的一种或多种技术,通过`OpenForm`这个文件来实现具体的...

    从零开始学JAVA第10章_构造器.ppt

    10.3.3章节探讨了在父子类之间的构造器调用流程。在创建子类对象时,会先调用父类的构造器,然后才是子类的构造器。这是因为在子类构造器中,`super()`语句会被自动插入到子类构造器的第一行,除非显式地提供了其他...

    Angular 2父子组件之间共享服务通信的实现

    在父子组件之间共享服务时,我们可以在父组件中调用服务的方法来获取数据,并且可以在子组件中调用同一个服务的方法来实现数据传递。 Angular 2 父子组件之间共享服务通信的实现是通过共享服务来实现的,我们可以...

    Java基础复习笔记01数组_内存形式_父子_内存控制

    - **构造顺序**: 当创建一个子类对象时,会先调用父类的构造方法,然后再调用子类的构造方法。如果没有显式调用父类的构造方法,则会默认调用无参的构造方法。 - **super关键字**: 使用`super()`显式调用父类构造器...

    java基础,入门的最好笔记

    8. **构造方法调用顺序**:创建子类对象时,会先调用父类的构造方法(如果没有指定,会调用无参构造器),然后执行子类的构造方法。 9. **super关键字**:super用于引用父类的成员,如字段和方法。在子类中,`super...

    基于java涉及父子类的异常详解

    本文将详细解析Java中父子类之间的异常处理规则。 1. 子类构造函数与父类构造函数的异常处理 Java中的构造函数并不受到覆盖方法的异常限制。这意味着子类构造函数可以抛出任何类型的异常,而不必考虑父类构造函数...

    pyqt父子窗口相互传值

    以上就是PyQt5中父子窗口之间传递数据的常见方法。根据实际情况,你可以选择最适合你应用需求的方式。实际开发中,可能还需要考虑线程安全、数据同步等问题,确保在多线程环境中正确地传递和处理数据。希望这个详细...

    类的继承与基类

    这种关系强调的是类之间的层次结构和共享属性,适用于那些具有明显父子类关系的情况。 #### 使用指导原则 当决定使用继承还是复合时,应遵循以下原则: - 如果“一个X对象本质上也是Y对象”,考虑使用继承(如...

    QT父子窗口相互传值

    在Qt编程中,窗口间的通信是常见的需求,无论是主窗口(MainWindow)与子窗口(ChildWindow)之间的数据交互,还是不同子窗口之间的信息传递。"QT父子窗口相互传值"这个主题,主要涉及Qt框架中如何有效地实现这种...

    简单的java类的重写还有父子类的练习(多种图形面积求取)

    在实际编程中,你可以创建一个主程序(Main)来测试这些类的功能,让用户选择图形类型并输入相关参数,然后调用`getArea()`和`getPerimeter()`方法来计算和输出结果。 这个练习不仅涵盖了Java中的继承和重写概念,...

    父子节点获取

    3. **工具类设计**:可以创建一个`TreeUtil`工具类,提供静态方法如`buildTree(List<Node> nodes)`,该方法接收一个包含所有节点的列表,然后按照上述逻辑构造出树形结构。 4. **实现类**:如果需要更复杂的功能,...

    父子对话框传递参数范例

    构造函数是类的一个特殊方法,用于初始化新创建的对象。当创建一个对象实例时,我们可以向构造函数传递参数,这些参数值将用于设置对象的初始状态。 对于子对话框,我们可以在其构造函数中定义一个参数,这个参数的...

    2021-2022计算机二级等级考试试题及答案No.17012.docx

    不允许在同一个类的两个构造方法之间互相调用`this`。 4. 主键与索引:在数据库中,主键的字段自动设置为唯一索引,不允许有重复值。 5. PowerPoint 幻灯片切换:在PowerPoint中,可以通过“幻灯片放映”菜单下的...

    Java-常见面试题.pdf

    这种父子类方法不在存在多态的性质。 Object 的常用方法 Object 类中有许多常用的方法,包括: * clone():保护方法,实现对象的浅复制,只有实现了 Cloneable 接口才可以调用该方法,否则抛出 ...

    05 看若兄弟,实如父子—Thread和Runnable详解.pdf

    当调用`start()`时,JVM会负责调度线程,使其在合适的时机执行,而直接调用`run()`只是执行一个普通的方法,不会创建新的线程,因此无法实现并发。 `start()`方法的注释提供了更深入的洞察,它提到`start()`方法会...

Global site tag (gtag.js) - Google Analytics