//假定一个子类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#编程中,"父子窗体的调用"是一个常见的功能需求,特别是在开发桌面应用程序时,例如Windows Forms或WPF应用。这个概念涉及到一个窗口(父窗体)如何启动、控制和通信与另一个窗口(子窗体)。下面将详细阐述这一...
这在开发GUI应用程序时尤为常见,例如一个窗体(Form1)打开另一个窗体(Form2),然后Form2执行某些操作并返回结果给Form1,或者调用Form1中的方法。这个过程可以通过多种方式实现,其中一种常见且灵活的方法是使用...
8. **构造方法调用顺序**:创建子类对象时,会先调用父类的无参构造方法,然后执行子类的构造方法。这是Java初始化过程的一部分。 9. **super关键字**:super用于访问和调用父类的成员,包括构造方法。super()调用...
以上就是在C#中使用`ShowModalDialog`实现父子窗体之间全传值的常见方法。实际开发中,你可以根据具体需求选择合适的方式。在这个案例中,可能涉及到了其中的一种或多种技术,通过`OpenForm`这个文件来实现具体的...
10.3.3章节探讨了在父子类之间的构造器调用流程。在创建子类对象时,会先调用父类的构造器,然后才是子类的构造器。这是因为在子类构造器中,`super()`语句会被自动插入到子类构造器的第一行,除非显式地提供了其他...
在父子组件之间共享服务时,我们可以在父组件中调用服务的方法来获取数据,并且可以在子组件中调用同一个服务的方法来实现数据传递。 Angular 2 父子组件之间共享服务通信的实现是通过共享服务来实现的,我们可以...
- **构造顺序**: 当创建一个子类对象时,会先调用父类的构造方法,然后再调用子类的构造方法。如果没有显式调用父类的构造方法,则会默认调用无参的构造方法。 - **super关键字**: 使用`super()`显式调用父类构造器...
8. **构造方法调用顺序**:创建子类对象时,会先调用父类的构造方法(如果没有指定,会调用无参构造器),然后执行子类的构造方法。 9. **super关键字**:super用于引用父类的成员,如字段和方法。在子类中,`super...
本文将详细解析Java中父子类之间的异常处理规则。 1. 子类构造函数与父类构造函数的异常处理 Java中的构造函数并不受到覆盖方法的异常限制。这意味着子类构造函数可以抛出任何类型的异常,而不必考虑父类构造函数...
以上就是PyQt5中父子窗口之间传递数据的常见方法。根据实际情况,你可以选择最适合你应用需求的方式。实际开发中,可能还需要考虑线程安全、数据同步等问题,确保在多线程环境中正确地传递和处理数据。希望这个详细...
这种关系强调的是类之间的层次结构和共享属性,适用于那些具有明显父子类关系的情况。 #### 使用指导原则 当决定使用继承还是复合时,应遵循以下原则: - 如果“一个X对象本质上也是Y对象”,考虑使用继承(如...
在Qt编程中,窗口间的通信是常见的需求,无论是主窗口(MainWindow)与子窗口(ChildWindow)之间的数据交互,还是不同子窗口之间的信息传递。"QT父子窗口相互传值"这个主题,主要涉及Qt框架中如何有效地实现这种...
在实际编程中,你可以创建一个主程序(Main)来测试这些类的功能,让用户选择图形类型并输入相关参数,然后调用`getArea()`和`getPerimeter()`方法来计算和输出结果。 这个练习不仅涵盖了Java中的继承和重写概念,...
3. **工具类设计**:可以创建一个`TreeUtil`工具类,提供静态方法如`buildTree(List<Node> nodes)`,该方法接收一个包含所有节点的列表,然后按照上述逻辑构造出树形结构。 4. **实现类**:如果需要更复杂的功能,...
构造函数是类的一个特殊方法,用于初始化新创建的对象。当创建一个对象实例时,我们可以向构造函数传递参数,这些参数值将用于设置对象的初始状态。 对于子对话框,我们可以在其构造函数中定义一个参数,这个参数的...
不允许在同一个类的两个构造方法之间互相调用`this`。 4. 主键与索引:在数据库中,主键的字段自动设置为唯一索引,不允许有重复值。 5. PowerPoint 幻灯片切换:在PowerPoint中,可以通过“幻灯片放映”菜单下的...
这种父子类方法不在存在多态的性质。 Object 的常用方法 Object 类中有许多常用的方法,包括: * clone():保护方法,实现对象的浅复制,只有实现了 Cloneable 接口才可以调用该方法,否则抛出 ...
当调用`start()`时,JVM会负责调度线程,使其在合适的时机执行,而直接调用`run()`只是执行一个普通的方法,不会创建新的线程,因此无法实现并发。 `start()`方法的注释提供了更深入的洞察,它提到`start()`方法会...