java 构造函数的解析

原创 2015年07月08日 14:35:21


java构造方法其实也是一种特殊的方法:
1.构造方法名必须和类名相同
2.构造方法没有返回值,不能定义为void类型
3.一个对象可以有多个构造方法,也可以没有构造方法,假如没有则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
4.构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
对于这些都是没有问题的,关键是加入继承关系后的构造函数的调用问题。
1.子类只继承父类的默认构造方法,即无形的构造方法,如果没有则不继承。
2.子类从父类继承的默认构造方法不能成为子类的默认构造方法。
3.如果子类想调用父类的非默认构造函数,则必须使用super来实现。
4.创建子类对象时,子类必须调用父类的构造函数。可以通过系统自动调用父类的默认构造函数,如果父类没有默认构造函数时,子类构造函数必须通过super调用父类的构造函数。
其实最关键的也是容易产生困惑的,就是调用的第4条。当我请求创建子类对象时,先会调用父类的构造方法,如果父类有默认的构造方法,则会调用父类的默认构造方法。
如果没有,则必须通过super调用父类的构造函数。
public class Person {
    public Person(){
        System.out.println("Person initialized");
    }
    public Person(String str){
        System.out.println("Person initialized"+str);
    }
}

public class Chinese extends Person {

    public Chinese() {
        System.out.println("Chinese initalized");
    }

    public Chinese(String str) {
        System.out.println("Chinese initialized " + str);
    }
}
当我们 Chinese ch= new Chinese("wo");的时候:
Person initialized
Chinese initialized wo
我们先调用父类的Person()方法,在调用子类的public Chinese(String str)。
假设我们修改Person类,
public class Person {
    public Person(String str){
        System.out.println("Person initialized"+str);
    }
}
那么编译器就好报chinese类的编译错误,也就是你必须调用的父类的构造方法,没有默认方法时必须通过super调用父类的构造函数。
Chinese类就得相应的修改为:
public class Chinese extends Person {

    public Chinese() {
        super(null);
        System.out.println("Chinese initalized ");
    }

    public Chinese(String str) {
        super(str);
        System.out.println("Chinese initialized " + str);
    }
}
结果:
Person initialized wo
Chinese initialized wo
假设我们修改Person类,
public class Person {
}
那么不对Chinese进行修改,也不会报错,这个时候没有显示的构造方法,就会启用默认的构造方法了。
另外,我觉得调用了父类的构造方法,但是并没有生成父类的对象,因为如果父类是抽象类的话,是不会支持实例化的。

c#和java中的构造函数

  • 2011年12月03日 08:03
  • 287KB
  • 下载

Java继承时构造函数的调用

  • 2013年08月06日 15:30
  • 22KB
  • 下载

Java中有关构造函数的一道笔试题解析

Java中有关构造函数的一道笔试题解析 1、具体题目如下 下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能...

构造函数继承.关于java

  • 2011年03月30日 21:35
  • 4KB
  • 下载

Java继承时构造函数的调用

  • 2007年09月25日 02:49
  • 4KB
  • 下载

java的反射(构造函数,属性,方法)以及JAXP解析DOM文档

构造函数的反射 1   无参数的构造函数  Class clazz = Class.forName("cn.jauronl.Person");    Constructor constructor...

构造函数解析

  • 2013年08月06日 11:38
  • 84KB
  • 下载

解析java.math.BigInteger类——构造函数(I)

最早由于做作业,结识了java的BigInrger类。读着读着,越来越觉得有趣。后来作业做完,也不忍丢下它,索性把全部代码研究一遍。      开始的时候,一个上午时间最多读懂2个方法。但是还是有滋...

java 构造函数的解析

java构造方法其实也是一种特殊的方法: 1.构造方法名必须和类名相同 2.构造方法没有返回值,不能定义为void类型 3.一个对象可以有多个构造方法,也可以没有构造方法,假如没有则编译系统会自...
  • wjbtian
  • wjbtian
  • 2014年04月17日 16:02
  • 937

“访问限制:由于对必需的库C:\Program Files\Java\jre1.8.0_20\lib\rt.jar具有一定限制,因此无法访问构造函数JFrame()”的解决方法

访问限制:由于对必需的库C:\Program Files\Java\jre1.8.0_20\lib\rt.jar具有一定限制,因此无法访问构造函数JFrame()...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 构造函数的解析
举报原因:
原因补充:

(最多只允许输入30个字)