注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Fly to the Sky!

很多人因为寂寞而错爱一个人,更多人因为错爱一个人而寂寞一生。

 
 
 

日志

 
 

super关键字  

2009-08-20 14:58:42|  分类: java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
super关键字

super和this关键字都可以用来覆盖Java语言的默认作用域,使被屏蔽的方法或变量变为可见。在以下场合会出现方法或变量被屏蔽的现象。

·场合一:在一个方法内,当局部变量和类的成员变量同名,或者局部变量和父类的成员变量同名时,按照变量的作用域规则,只有局部变量在方法内可见。

·场合二:当子类的某个方法覆盖了父类的一个方法,在子类的范围内,父类的方法不可见。

·场合三:当子类中定义了和父类同名的成员变量时,在子类的范围内,父类的成员变量不可见。

在例程6-3中,在父类Base和子类Sub中都定义了成员变量var及成员方法method()。在Sub类中,可通过super.var和super.method()来访问Base类的成员变量var及成员方法method()。

例程6-3 Sub.java

package usesuper;

class Base{

String var="Base's Variable";

void method(){System.out.println("call Base's method"); }

}

public class Sub extends Base{

String var="Sub's variable"; //隐藏父类的var变量

void method(){System.out.println("call Sub's method");} //覆盖父类的method()方法

void test(){

String var="Local variable"; //局部变量

System.out.println("var is "+var); //打印method()方法的局部变量

System.out.println("this.var is "+ this.var); //打印Sub实例的实例变量

System.out.println("super.var is "+ super.var); //打印在Base类中定义的实例变量

method(); //调用Sub实例的method()方法

this.method(); //调用Sub实例的method()方法

super.method(); //调用在Base类中定义的method()方法

}

public static void main(String args[]){

Sub sub=new Sub();

sub.test();

}

}

以上程序的打印结果如下:

var is Local variable

this.var is Sub's variable

super.var is Base's Variable

call Sub's method

call Sub's method

call Base's method

值得注意的是,如果父类中的成员变量和方法被定义为private类型,那么子类永远无法访问它们,如果试图采用super.var的形式去访问父类的private类型的var变量,就会导致编译错误。

在程序中,在以下情况下会使用super关键字:

l 在类的构造方法中,通过super语句调用这个类的父类的构造方法,参见第11章的11.2.3节(子类调用父类的构造方法)。

l 在子类中访问父类的被屏蔽的方法和属性。

还有需要注意的是,只能在构造方法或实例方法内使用super关键字,而在静态方法和静态代码块内不能使用super关键字,

  评论这张
 
阅读(940)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017