super的用法

        在Java中,执行子类的构造方法之前或者子类没有明确地指定构造方法,会自动地调用父类中没有参数的构造方法。其目的是为了帮助继承自父类的成员变量做初始化操作。问题是,如果父类有多个构造方法,如何才能调用父类中特定的构造方法呢?如果在子类中还需要用到父类中被隐藏的变量或者被覆盖了的方法,该怎么办呢?Java提供了关键字super来实现对父类的成员和方法的访问。super有三种情况可以使用:

(1)用来访问父类中被覆盖的方法

(2)用来调用父类中的构造方法

(3)用来访问父类中被隐藏的成员变量

<span style="font-size:24px;"><span style="font-size:24px;">
package java5;

public class java5 {
    public static void main(String args[]){
    	Subclass Subc = new Subclass();
    	Subc.dosomething();
    }
}

class Superclass{
	int x;
	Superclass(){
		x = 3;
		System.out.println("in Superclass:x = "+x);
	}
	void dosomething(){
		System.out.println("in Superclass.dosomething");
	}
}

class Subclass extends Superclass{
	int x;
	Subclass(){
		super();//A行
		x = 5;//B行
		System.out.println("in Subclass:x = "+x);
	}
	void dosomething(){
		super.dosomething();
		System.out.println("in Subclass.dosomething()");
		System.out.println("super.x = "+super.x+" \tsub.x = "+x);
	}
}
</span></span>

运行结果见下图:


        注意:在子类中用super关键字可以使用父类中被覆盖的方法和被隐藏的变量。在所有的父类中的非static方法都可以用super调用。数据成员变量的值也可以用super来访问,如果一个类有父类还有祖先类,即父类的父类,super是指父类而不是祖先类。

 

        与父类的其他成员不同,父类的构造方法是不能被它的子类继承的,也就是必须为子类定义一个构造方法或者使用默认(无参)的构造方法。

        如果在子类中定义了一个构造方法,它没有显式包含调用父类的构造方法,那么Java编译器将添加”super();”作为该构造方法的第一条语句,即假如例子中没有A行,编译器在编译时将自动在B行前加上”super();”。

        如果父类定义有带参数的构造方法,也就是说明系统不会对它添加默认的构造方法,那么在子类中将会出现编译错误。因为编译器自动加上super()方法,但实际上父类中不存在与之相匹配的无参构造方法,结果导致编译错误。


(这部分内容摘抄自《Java程序设计实用教程》)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值