初始化的顺序为:
先初始化父类的静态代码--->初始化子类的静态代码-->创建实例(如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数
子类继承父类会先初始化父类,调用父类的构造函数,子类的构造方法的第一条语句就是调用父类的没有参数的构造方法,如果你没有写出这条语句java虚拟机就会默认的调用,如果你显示的写了这条语句,就一定要写在构造方法中的第一条语句,不然会报错。
原理简述:只有在构造方法中调用了父类的构造方法才能继承父类的相关属性和方法,要不然子类从哪里继承父类的属性和方法,在实例化子类的时候又没有和父类有任何关系。
子类的构造函数默认调用和这个构造函数参数一致的父类构造函数,除非在此子类构造函数的第一行显式调用父类的某个构造函数。
类Example1:
class father{
int x=0,y=0;
father(){
System.out.println("now is in father's constructor");
}
father(int x,int y){
this.x=x;
this.y=y;
}
public void print(){
System.out.println("x="+x+";y="+y);
}
}
class son extends father{
son(){
System.out.println("now is in son's constructor");
}
son(int x,int y){
super(x,y);//改变x,y,的值,若无super(x,y),则默认调用father()
}
public void print(){
super.print();
System.out.println("my name is son!");
}
}
public class Example1 {
public static void main (String[] args){
son s=new son();//实例化构造的时候从父类开始调用
s.print();//此处不是构造,是调用
son f=new son(10,20);
f.print();
}
}
运行结果:
now is in father's constructor
now is in son's constructor
x=0;y=0
my name is son!
x=10;y=20
my name is son!
类Example2:
class father{
int x=0,y=0;
father(){
System.out.println("now is in father's constructor");
}
father(int x,int y){
this.x=x;
this.y=y;
}
public void print(){
System.out.println("x="+x+";y="+y);
}
}
class son extends father{
son(){
System.out.println("now is in son's constructor");
}
son(int x,int y){
//改变x,y,的值
System.out.println("s213");
}
public void print(){
//引用父类的print函数
System.out.println("my name is son!");
}
}
public class Example2 {
public static void main (String[] args){
son s=new son();//实例化构造的时候从父类开始调用
s.print();//此处不是构造,是调用, oh,yeah!
son f=new son(10,20);//先调用父类的father(){System.out.println("now is in }
//而不是father(int x,int y){this.x=x;this.y=y;}
f.print();
}
}
运行结果
now is in father's constructor
now is in son's constructor
my name is son!
now is in father's constructor
s213
对比这两个类的注释和结果相信你就会明白了。
分享到:
相关推荐
在Java编程语言中,构造器(Constructor)是一个特殊的方法,主要负责对象的初始化工作。当创建一个新的类实例时,构造器会被自动调用。构造器的名称必须与类名完全相同,且没有返回类型,包括void。理解并熟练运用...
关于调用Java构造方法,你可以这样做: ```c++ jclass javaClass = env->FindClass("com/example/YourJavaClass"); jmethodID constructor = env->GetMethodID(javaClass, "<init>", "()V"); jobject javaObject = ...
Java 程序中的构造方法调用 Java 程序设计语言中的构造方法是一个特殊的成员方法,它专门用于创建对象和对所创建的对象进行初始化。正确调用构造方法是我们设计程序的关键所在。构造方法的调用方式有三种:一是在...
了解和熟练使用构造方法是Java面向对象编程的基础,下面将详细阐述Java构造方法的相关知识点。 一、构造方法的作用 构造方法的主要任务是在创建对象时设置对象的初始状态,为对象成员变量赋值。当一个类被实例化时...
#### 六、构造方法调用的顺序 在类的继承结构中,构造方法的调用顺序遵循自底向上的原则,即从最底层的子类开始,逐级向上调用父类的构造方法,直到到达最顶层的基类(通常是`Object`类)为止。这一过程确保了所有...
Java构造方法是面向对象编程中的一个关键概念,用于初始化新创建的对象。在Java类中,构造方法是一个特殊的方法,它的名字必须与类名完全相同,没有返回类型,甚至不包括void关键字。当我们创建一个类的新实例时,...
Java 中构造方法的深入研究与探讨 本文探讨了 Java 中构造方法的概念、特点和应用,通过对构造方法的深入研究和探讨,阐述了其在继承和设计模式中的重要作用。 知识点一:构造方法的概念和特点 构造方法是 Java ...
### Java中构造方法被封装后的调用 #### 知识点概述 在Java语言中,封装是面向对象编程的一个核心特性,它通过隐藏对象的实现细节,并对外提供接口来进行交互,以此来保护数据的安全性和提高代码的可维护性。封装...
Java的子类调用父类的构造方法.pdf
本文件主要探讨了Java中带有不同构造方法的程序如何影响内存分析,这包括无参构造方法、带参数的构造方法以及它们在内存分配中的应用。 首先,让我们了解一下构造方法。构造方法是一种特殊的方法,它的名字与类名...
Java继承关系下的构造方法调用是Java语言中一个非常重要的概念,它关系到类的继承和对象的实例化。在Java中,创建一个类的对象时,如果该类存在父类,则先调用父类的构造方法,然后再调用子类的构造方法。这意味着,...
总结,Java子类构造方法的使用涉及到继承、初始化、方法调用等多个概念。正确理解和运用这些知识点对于编写健壮的Java程序至关重要。通过熟练掌握这些内容,开发者可以更好地设计和实现类的层次结构,提高代码的复用...
Java 中的继承(子类调用父类构造方法还不懂) Java 中的继承是指一个类可以继承另一个类的属性和方法,这样可以实现代码的复用和提高开发效率。在 Java 中,继承使用关键字 `extends` 来实现。 Java 中继承的注意...
Java中的构造方法是类的重要组成部分,它在对象创建过程中扮演着关键角色,主要负责对象的初始化。构造方法具有以下几个显著特点: 1. **与类名相同**:构造方法的方法名必须与类的名称完全一致。例如,如果有一个...
在Java编程语言中,构造方法是用于初始化新创建对象的特殊方法。它们的名字与类名相同,不返回任何类型,并且通常与new关键字一起使用。构造方法的重载(Overloading)是面向对象编程的一个重要特性,允许我们在同一...
Java 构造方法是编程语言中的一个重要概念,特别是在面向对象编程中,如Java。它们是类的特殊方法,用于初始化新创建的对象。当一个对象被创建时,构造方法会被自动调用,为对象的成员变量赋值,进行必要的设置,...
在Java编程语言中,构造方法和普通方法是两种不同类型的方法,它们在功能和使用场景上有着显著的区别。本文将详细阐述这两种方法的特性及其在实际编程中的应用。 首先,构造方法是专门用于初始化新创建的对象的特殊...
在Java中,构造方法的调用是自动进行的,当通过`new`关键字创建类的新实例时,系统会自动寻找合适的构造方法来执行。如果类中没有显式定义构造方法,Java编译器会为类提供一个默认的无参构造方法,该方法不执行任何...