java和C++注意事项

本文详细解释了Java中super的用法,包括如何调用父类构造方法及注意事项。探讨了不同构造方法场景下super的应用,以及如何在子类构造函数中正确调用父类构造函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 . java中super的用法,是调用父类构造方法?那为什么不直接继承,要返回去再调用呢?

调用父类的的构造方法,因为构造方法不能被继承,所以需要调用父类的,这里分为两种情况:
1、当父类中有默认的构造函数时,子类自动调用父类的构造方法;
2、当父类中有带参数的构造函数时,子类需要使用super关键字调用父类的构造函数,而且必须放在子类构造方法的第一句。

任何类都有构造方法,哪怕是你不写,也会默认有一个有无参构造方法。所以你的A里面就会有一个叫A()的构造方法。
当你new A()时,默认你有一个有无参构造方法A()的方法里的第一句,会自动加上一个super();的方法,这句就是调用父类构造方法的意思,这是java规定的规则。
你可以尝试一下,在A里写一个构造方法:
A(){
super();   //这个一定要放在第一句
System.out..XX;
}
这与你不写super()这句效果是一样的,因如果没写,java会默认在第一句加上super();

如果你是想在子类的构造函数中调用父类构造函数,则需要在子类的构造函数的函数体第一行(注释语句除外)使用:super(参数列表)的方式调用,
该参数列表与父类有参构造函数声明的参数列表一致,如果你不是在子类构造函数中调用,则无法直接调用父类构造函数,这时创建一个父类对象
(通过你想调用的有参父类构造函数创建),就间接调用了该构造函数。

2 .如果父类只有有参数的构造函数,子类是否也无条件调用父类的有参构造函数呢?

子类可以无条件调用父类的无参数构造函数,如要调用有参数构造函数的话需要显式调用,但如果子类中没有显式调用父类的构造函数时,
会调用父类编译器自动给加上的无参构造函数,你可以通过反编译看到父类中多了一个无参的构造函数。如:

class Child {
	public static void main(String args[])
	{
		System.out.println("this is father class");
	}
	
	Child()
	{
		System.out.println("ok...");		
	}
}

public class Parent extends Child{

	Parent(String a,String b){
		//super();//不管加不加这句,子类都默认调用父类无参构造方法
		System.out.println("this is child mudi struct method");
	}

	public static void main(String args[])
	{
		System.out.println("this is child class");
		Parent p = new Parent("xx","xx");
	}
}


需要注意的是,java使用的都是句柄连接new对象的形式,并自动回收垃圾,而C++则是使用对象变量的形式,其构造函数在类对象定义时自动调用,赋值时调用拷贝构造
函数,而java只是复制一份句柄,对象没有复制。

在java中,Parent p;表示未初始化变量,不能使用。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值