免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1402 | 回复: 4
打印 上一主题 下一主题

关于super()的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-14 17:30 |只看该作者 |倒序浏览
那位大哥能给详细解释一下
super
谢谢!

论坛徽章:
0
2 [报告]
发表于 2006-02-14 20:47 |只看该作者
super表示对父类实例的引用。

super()表示父类的构造函数

论坛徽章:
0
3 [报告]
发表于 2006-02-14 22:04 |只看该作者
原帖由 sakulagi 于 2006-2-14 20:47 发表
super表示对父类实例的引用。



这个..应该说调用父类的方法的一个关键字来用吧?
在子类对象里面会有一个父类实例么?这个问题我疑惑很久了

论坛徽章:
0
4 [报告]
发表于 2006-02-15 02:37 |只看该作者
给你段代码看看

  1. public class TestIn1 {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 TestIn2 t2 = new TestIn2();
  8.                 t2.run();
  9.         }

  10.         public void run() {
  11.                 // TODO Auto-generated method stub
  12.                 show();
  13.         }
  14.        
  15.         protected void show()
  16.         {
  17.                 System.out.println("show in1");
  18.         }

  19. }

  20. class TestIn2 extends TestIn1 {
  21.        
  22. }
复制代码


运行后显示 show in1


  1. public class TestIn1 {

  2.         /**
  3.          * @param args
  4.          */
  5.        
  6.         protected String name;
  7.        
  8.         public static void main(String[] args) {
  9.                 // TODO Auto-generated method stub
  10.                 TestIn2 t2 = new TestIn2("class2");
  11.                 t2.run();
  12.         }
  13.        
  14.         public TestIn1(String name)
  15.         {
  16.                 this.name = name;
  17.         }

  18.         public void run() {
  19.                 // TODO Auto-generated method stub
  20.                 show();
  21.         }
  22.        
  23.         private void show()
  24.         {
  25.                 System.out.println("show in1");
  26.         }

  27. }

  28. class TestIn2 extends TestIn1 {
  29.        
  30.         public TestIn2(String name)
  31.         {
  32.                 super(name);
  33.         }
  34.        
  35.         public void run()
  36.         {
  37.                 show();
  38.                 super.run();
  39.         }
  40.        
  41.         public void show()
  42.         {
  43.                 System.out.println("show in2");
  44.         }
  45. }
复制代码

运行后显示
show in2
show in1

说明几个问题:
1. 如果子类中不定义和父类中同名的方法,则自动继承父类的方法。
2. 父类中的private方法不能被子类直接使用,但是可以通过super.method()间接使用。
3. 因为构造函数不能被继承,super()用来传递构造函数

通过super()来传递构造函数参数的方法非常有用,特别是在GUI的编程,还有自定义的Exception等等,比如

  1. public class ConnectionException extends Exception
  2. {
  3.     public ConnectionException(String msg)
  4.     {
  5.         super(msg);
  6.     }
  7. }
复制代码

[ 本帖最后由 perryhg 于 2006-2-16 01:33 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-02-15 21:04 |只看该作者
原帖由 艾斯尼勒 于 2006-2-14 22:04 发表


这个..应该说调用父类的方法的一个关键字来用吧?
在子类对象里面会有一个父类实例么?这个问题我疑惑很久了

是的。否则从父类继承来的那些成员量存放在哪里?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP