package net.javayuan.test;
public class ConstructorTest {
public static void main(String[] args){
Sup sub1 = new Sub();
}
}
class Sup{
public Sup(){
System.out.println("sup()");
}
}
class Sub extends Sup{
}
输出:sup()
如果子类没有定义构造方法,会调用一个默认的无参数构造方法。同时,这个无参数构造方法会自动调用super(),即父类的无参数构造方法。
class Sub extends Sup{
public Sub(){
}
}
输出:sup()
如果子类定义了无参数构造方法,但方法体里什么都没写,这种情况下,这个无参数构造方法写和不写没有区别。实例化子类时,同样是先调用子类的无参数构造方法,然后自动调用super()。与前面的代码相比,这里只不过是显式声明了一个无参数构造方法,而之前的代码中子类无参数构造方法是隐式的。
class Sub extends Sup{
public Sub(){
super();
}
}
输出:sup()
同样,这段代码和前一段相比,只是显式调用了super()。前一段代码对super()的调用是隐式的。
重新编写另一段代码:
package net.javayuan.test;
/**
* @(#)ConstructorTest.java 2008-8-1 上午10:14:56
*
* @author Yuan
* 构造方法测试
*/
public class ConstructorTest {
public static void main(String[] args){
Sup sub1 = new Sub(1);
}
}
class Sup{
public Sup(int i){
System.out.println("sup(int)");
}
}
class Sub extends Sup{
}
提示Sub类无法编译:
引用
The constructor Sub(int) is undefined
Implicit super constructor Sup() is undefined for default constructor. Must define an explicit constructor
由于子类未提供带1个int参数的构造方法,同时,这里的子类有一个默认无参数构造方法,并且它隐式调用了父类的无参数构造方法,父类在显式定义了一个带1个int参数的构造方法后,那个隐式的无参数构造方法就不存在了,需要显式定义,所以无法编译。
为Sup定义了显式的无参构造方法后,代码如下:
package net.javayuan.test;
/**
* @(#)ConstructorTest.java 2008-8-1 上午10:14:56
*
* @author Yuan
* 构造方法测试
*/
public class ConstructorTest {
public static void main(String[] args){
Sup sub1 = new Sub(1);
}
}
class Sup{
public Sup(){
System.out.println("sup()");
}
public Sup(int i){
System.out.println("sup(int)");
}
}
class Sub extends Sup{
}
类ConstructorTest无法编译,提示为:
引用
The constructor Sub(int) is undefined
同前一段代码一样,子类没有提供1个带int参数的构造方法,ConstructorTest类无法编译。
修改Sub类的代码:
class Sub extends Sup{
public Sub(int i){
}
}
输出:sup()
子类构造方法中没有显式调用父类任意一个构造方法,这种情况下默认会调用父类的无参数构造方法,也就是说,这里有一个隐式的super()在子类构造方法中。
class Sub extends Sup{
public Sub(int i){
super(i);
}
}
输出:sup(int)
这里显式的调用了父类的带1个int参数的构造方法,就不再自动调用父类的无参数构造方法了。
分享到:
相关推荐
关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT ...
Java构造方法是面向对象编程中的一个关键概念,用于初始化新创建的对象。在Java类中,构造方法是一个特殊的方法,它的名字必须与类名完全相同,没有返回类型,甚至不包括void关键字。当我们创建一个类的新实例时,...
关于构造方法的继承,Java中类的继承并不包括构造方法。子类不能直接继承父类的构造方法,但它可以通过`super`关键字调用父类的构造方法。例如: ```java public class DerivedClass extends BaseClass { public ...
### Java零基础-构造方法详解 ...- 阅读Java官方文档,了解更多关于构造方法的细节。 - 尝试为不同的类定义多个构造方法,以适应更多样的初始化需求。 - 在项目实践中应用构造方法,增强代码的可读性和可维护性。
在Java编程语言中,构造方法(Constructor)是一个特殊的方法,它的主要作用是初始化新创建的对象。构造方法与类名相同,没有返回类型,也不需要在方法签名中声明void。了解和熟练使用构造方法是Java面向对象编程的...
### Java构造方法详解 #### 一、构造方法基础概念 构造方法是Java中一种特殊的方法,主要用于初始化新创建的对象。每个类至少有一个构造方法。如果程序员没有显式地定义构造方法,Java编译器会自动为类添加一个无...
本文件主要探讨了Java中带有不同构造方法的程序如何影响内存分析,这包括无参构造方法、带参数的构造方法以及它们在内存分配中的应用。 首先,让我们了解一下构造方法。构造方法是一种特殊的方法,它的名字与类名...
【Flutter】Dart 面向对象 ( 命名构造方法 | 工厂构造方法 | 命名工厂构造方法 ) https://hanshuliang.blog.csdn.net/article/details/113746569 博客源码快照
Java 构造方法是编程语言中的一个重要概念,特别是在面向对象编程中,如Java。它们是类的特殊方法,用于初始化新创建的对象。当一个对象被创建时,构造方法会被自动调用,为对象的成员变量赋值,进行必要的设置,...
Java中的继承与静态static等的执行先后顺序的面试题 java面试题静态加载顺序构造方法 ...2、调用类的构造方法时先调用父类的构造方法,在调用子类的构造方法 3、类初始化时,先初始化类的属性成员,在执行构造方法。
Java 枚举类的属性、方法和构造方法应用实战 Java 枚举类是一种特殊的类,它拥有自己的属性、方法和构造方法。本文将详细介绍 Java 枚举类的属性、方法和构造方法应用实战,结合实例形式分析了 Java 枚举类的定义、...
什么是构造方法?__init__,如何正确使用构造方法?什么是析构方法?__del__,如何正确使用析构方法?以及self的使用
它可能详细介绍了如何设计和使用构造方法,包括参数化的构造方法、重载构造方法、以及构造方法与this关键字和super关键字的配合使用。 总之,类和对象是面向对象编程的基础,它们帮助我们将复杂的问题抽象为独立的...
79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java...
"百度迁徙规模指数构造方法反演" 百度迁徙规模指数作为一个无量纲数,其构造方法并未公开。然而,了解该指数的构造方法对于分析人口迁徙规律和COVID-19疫情防控具有重要意义。研究表明,百度迁徙规模指数与实际迁徙...
在Java编程语言中,子类继承父类时,构造方法起着至关重要的作用。它们用于初始化对象,并在创建新实例时执行特定的设置步骤。理解如何在子类中使用构造方法是掌握面向对象编程的关键部分。本文将深入探讨Java子类...
java构造方法的学习对java学习者尤为重要
●类的定义 ●对象的定义 ●类与对象 ●对象定义类的示例 ●实例变量 ●实例方法 ●实例成员的访问 ●对象的创建 ●构造方法 ●构造方法的特点 ●实例成员访问形式
Java的构造方法 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 构造方法是类的一种特殊方法,用来初始化类的一个新的对象,在创建...