super(实参)的用法

该博客展示了Java编程中的类继承概念,通过`CreditAccount`类继承`Account`类来实现账户功能的扩展。在`CreditAccount`类中,定义了信用额度属性并提供了相关方法。博客还演示了如何使用构造器初始化对象,包括无参构造器和带参构造器的使用,以及如何调用父类的构造器。示例代码包括创建和打印两个不同类型的账户实例。
public class SuperTest03 {
	public static void main(String[] args) {
		CreditAccount ca1 = new CreditAccount();
		System.out.println(ca1.getActno() + "," + ca1.getBanlance() + "," + ca1.getCredit());
		CreditAccount ca2 = new CreditAccount("1111",10000.0,0.09);
		System.out.println(ca2.getActno() + "," + ca2.getBanlance() + "," + ca2.getCredit());
	}
}
class Account{
	private String actno;
	private double banlance;

	public Account() {

	}
	public Account(String actno,double banlance) {
		this.actno = actno;
		this.banlance = banlance;

	}
	public void setActno(String actno) {
		this.actno = actno;
	}
	public String getActno() {
		return actno;
	}
	public void setBanlance(double banlance) {
		this.banlance = banlance;
	}
	public double getBanlance() {
		return banlance;
	}
}

class CreditAccount extends Account{
	private double credit;
	public CreditAccount() {

	}

	public CreditAccount(String actno,double banlance,double credit) {
		//私有的属性只能在本类中访问。
		/*
	 	this.actno = actno;
		this.banlance = banlance;
		*/
		//调用父类中有参数的构造函数
		super(actno,banlance);
		this.credit = credit;
	}

	public void setCredit(double credit) {
		this.credit = credit;
	}
	public double getCredit() {
		return credit;
	}
}
### Java 构造方法中 `super` 关键字的使用 #### 访问父类构造函数 在Java中,`super()` 可以用来显式调用父类的构造函数[^2]。当创建子类对象时,默认情况下会自动调用无参的父类构造器;但如果希望传递参数给父类或者指定特定版本的带参构造,则需手动添加此语句。 ```java class Parent { public Parent(String message){ System.out.println(message); } } class Child extends Parent{ // 调用带有字符串参数的Parent构造函数 public Child(){ super("Child is calling parent constructor"); } } ``` #### 子类构造方法中的隐含调用 值得注意的是,在每一个子类构造器内部都会存在一个默认的对父类构造器的调用操作,即如果程序员没有显示写出 `super(...)` 或者 `this(...)`, 编译器会在编译阶段自动生成一条不带任何实参列表的 `super();` 作为第一条执行指令[^3]。 #### 方法重载与超类成员访问 除了用于初始化之外,`super` 还允许当前实例在其定义范围内引用来自其直接基类型的隐藏字段或覆盖的方法。这有助于区分同名但不同作用域内的变量和行为实现[^1]。 ```java public class Animal { protected String name; public void setName(String name) { this.name = name; } public String getName() { return name; } } public class Dog extends Animal { private String name; // 隐藏了Animal里的name属性 @Override public void setName(String name) { super.setName(name); // 设置父类的name属性 this.name = "Dog's own "+name; // 设置自己的name属性 } @Override public String toString() { return "Super Class Name: " + super.getName() + ", SubClass Name:" + this.name ; } } ``` 上述例子展示了如何利用 `super` 来分别设置并获取父类 (`Animal`) 和本类 (`Dog`) 中相同名称的数据成员值。 #### 注意事项 - `super()` 必须位于子类构造体的第一条可执行语句处。 - 如果子类有多个构造函数,则每个都需要独立声明所需的 `super()` 形式。 - 当不存在合适的匹配项时(比如缺少必要的参数),将会引发编译错误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值