`

关于构造方法

    博客分类:
  • Java
阅读更多
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参数的构造方法,就不再自动调用父类的无参数构造方法了。
分享到:
评论
2 楼 ccxw1983 2010-09-06  
归纳:
a.如果不写有参构造,会隐式的拥有无参构造 public classname(){super();} 
b.如果写了构造,则隐式的构造会不存在的
c.实例化类的时候,注意只能调用存在的构造函数,不能因为父类定义了个有参的就在子类里面直截使用这种参数的构造方法。
导致的结果,如:
a.如果父类只有一带参构造,子类必须写个构造(为空、有参随便),且第一句必须为调用父类存在的构造方法的!
1 楼 magicalboy 2009-12-09  
学习了,哈哈

相关推荐

    java 构造方法PPT

    关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT 关于构造方法的PPT ...

    构造方法JAVA构造方法

    Java构造方法是面向对象编程中的一个关键概念,用于初始化新创建的对象。在Java类中,构造方法是一个特殊的方法,它的名字必须与类名完全相同,没有返回类型,甚至不包括void关键字。当我们创建一个类的新实例时,...

    Java中的构造方法分析.pdf

    关于构造方法的继承,Java中类的继承并不包括构造方法。子类不能直接继承父类的构造方法,但它可以通过`super`关键字调用父类的构造方法。例如: ```java public class DerivedClass extends BaseClass { public ...

    Java零基础-构造方法.md

    ### Java零基础-构造方法详解 ...- 阅读Java官方文档,了解更多关于构造方法的细节。 - 尝试为不同的类定义多个构造方法,以适应更多样的初始化需求。 - 在项目实践中应用构造方法,增强代码的可读性和可维护性。

    java 构造方法的资源

    在Java编程语言中,构造方法(Constructor)是一个特殊的方法,它的主要作用是初始化新创建的对象。构造方法与类名相同,没有返回类型,也不需要在方法签名中声明void。了解和熟练使用构造方法是Java面向对象编程的...

    java构造方法

    ### Java构造方法详解 #### 一、构造方法基础概念 构造方法是Java中一种特殊的方法,主要用于初始化新创建的对象。每个类至少有一个构造方法。如果程序员没有显式地定义构造方法,Java编译器会自动为类添加一个无...

    java中带有不同构造方法的程序内存分析

    本文件主要探讨了Java中带有不同构造方法的程序如何影响内存分析,这包括无参构造方法、带参数的构造方法以及它们在内存分配中的应用。 首先,让我们了解一下构造方法。构造方法是一种特殊的方法,它的名字与类名...

    【Flutter】Dart 面向对象 ( 命名构造方法 工厂构造方法 命名工厂构造方法 ).zip

    【Flutter】Dart 面向对象 ( 命名构造方法 | 工厂构造方法 | 命名工厂构造方法 ) https://hanshuliang.blog.csdn.net/article/details/113746569 博客源码快照

    Java 构造方法

    Java 构造方法是编程语言中的一个重要概念,特别是在面向对象编程中,如Java。它们是类的特殊方法,用于初始化新创建的对象。当一个对象被创建时,构造方法会被自动调用,为对象的成员变量赋值,进行必要的设置,...

    java面试题静态加载顺序构造方法

    Java中的继承与静态static等的执行先后顺序的面试题 java面试题静态加载顺序构造方法 ...2、调用类的构造方法时先调用父类的构造方法,在调用子类的构造方法 3、类初始化时,先初始化类的属性成员,在执行构造方法。

    java枚举类的属性、方法和构造方法应用实战

    Java 枚举类的属性、方法和构造方法应用实战 Java 枚举类是一种特殊的类,它拥有自己的属性、方法和构造方法。本文将详细介绍 Java 枚举类的属性、方法和构造方法应用实战,结合实例形式分析了 Java 枚举类的定义、...

    python构造方法.html

    什么是构造方法?__init__,如何正确使用构造方法?什么是析构方法?__del__,如何正确使用析构方法?以及self的使用

    类和对象、构造方法总结

    它可能详细介绍了如何设计和使用构造方法,包括参数化的构造方法、重载构造方法、以及构造方法与this关键字和super关键字的配合使用。 总之,类和对象是面向对象编程的基础,它们帮助我们将复杂的问题抽象为独立的...

    79.java构造方法.zip

    79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java...

    百度迁徙规模指数构造方法反演.docx

    "百度迁徙规模指数构造方法反演" 百度迁徙规模指数作为一个无量纲数,其构造方法并未公开。然而,了解该指数的构造方法对于分析人口迁徙规律和COVID-19疫情防控具有重要意义。研究表明,百度迁徙规模指数与实际迁徙...

    java 子类构造方法

    在Java编程语言中,子类继承父类时,构造方法起着至关重要的作用。它们用于初始化对象,并在创建新实例时执行特定的设置步骤。理解如何在子类中使用构造方法是掌握面向对象编程的关键部分。本文将深入探讨Java子类...

    java构造方法学习案例

    java构造方法的学习对java学习者尤为重要

    类与对象、构造方法

    ●类的定义 ●对象的定义 ●类与对象 ●对象定义类的示例 ●实例变量 ●实例方法 ●实例成员的访问 ●对象的创建 ●构造方法 ●构造方法的特点 ●实例成员访问形式

    Java的构造方法

    Java的构造方法 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 构造方法是类的一种特殊方法,用来初始化类的一个新的对象,在创建...

Global site tag (gtag.js) - Google Analytics