当前位置: 首页 > 工具软件 > super-rentals > 使用案例 >

继承_super()

公孙鸿才
2023-12-01

创建子类实例时,会先执行父类构造函数定义的流程,再执行子类构造函数定义的流程。如下例:

	class Some{
		Some(){
			System.out.println("调用Some()");
		}
	}
	class Other extends Some{
		Other (){
			System.out.ptintln("调用Other()");
		}
	}

如果执行new Other(),是先执行Some()中的流程,再执行Other中的流程,也就是显示结果为:

	调用Some()
	调用Other()

继续看原因:
我们知道,父类中可以重载多个构造函数,如果子类构造函数中没有指定执行父类的哪一个构造函数,默认就会调用父类的无参构造函数。如果想要执行其他某一个构造函数,可以使用super()指定,例如:

class Some{
	Some(){
		System.out.println("调用Some()");
	}
	Some(int i){
		System.out.println("调用Some(int i)");
	}
}
class Other extends Some{
	Other (){
		super(10);    //指定某一构造方法,不一定打印输出。
		System.out.ptintln("调用Other()");
	}
}

在这个例子中,new Other()时,首先执行了super(10),表示调用构造函数时传入int数值10,也就是调用父类中Some(int i)版本的构造函数,而后再继续执行Other()中super(10)之后的流程。


重点来了,其实当你这么撰写时:

	class Some{
		Some(){
			System.out.println("调用Some()");
		}
	}
	class Other extends Some{
		Other (){
			System.out.ptintln("调用Other()");
		}
	}

前面谈过,如果子类的构造函数中没有指定调用父类的哪一个构造函数,那么默认调用父类的无参构造函数,也就相当于你这么写:

	class Some{
		Some(){
			System.out.println("调用Some()");
		}
	}
	class Other extends Some{
		Other (){
			super();    //super()默认省略。
			System.out.ptintln("调用Other()");
		}
	}


注意:
this()与super()只能择一调用,并且一定要在构造函数的第一行。

 类似资料: