A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© barlay 中级黑马   /  2013-12-13 20:40  /  1416 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Outer{
  2.         public int num = 10;
  3.        
  4.         public static void main(String[] args) {
  5.                 Inner in =new Inner();
  6.                 in.method();
  7.         }
  8. }
  9. class Inner extends Outer{
  10.         public void method(){
  11.                 System.out.println(Inner.super.num);
  12.         }
  13. }
  14. --------------------------------------------------------------------
  15. public class Outer{
  16.         public int num = 10;
  17.         public class Inner extends Outer{
  18.                 public void method(){
  19.                         System.out.println(Inner.super.num);
  20.                 }
  21.         }
  22.         public static void main(String[] args) {
  23.                 Outer.Inner in =new Outer().new Inner();
  24.                 in.method();
  25.         }
  26. }
复制代码

为啥第一段代码执行出错,第二段代码就行,还有super到底是个什么东西?请高手解答!

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

10 个回复

倒序浏览
你的第一段代码,输出时直接写super.num就可以了
而你第二段代码因为是内部类,所以那样的写法是可以编译通过的。
要说super就先要说this,this代表的是哪个对象调用它,就代表是哪个对象。
而与this不同的是,super表示的是父类的。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
你的错误:JAVA代码格式
在继承的父类里,是不能有main主函数的
class Outer
{
        public int num = 10;
        
        
}

class Inner extends Outer
{
        public void method()
                {
                System.out.println(Inner.super.num);
        }
}
class OuterTest
{
        public static void main(String[] args)
        {
                Inner in =new Inner();
                in.method();
        }
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
super是代表父类的存储空间标识,简单的理解就是父类的调用,this是当前类的调用
回复 使用道具 举报
小楼一夜听春雨 发表于 2013-12-13 20:53
你的错误:JAVA代码格式
在继承的父类里,是不能有main主函数的
class Outer

(⊙o⊙)…额,谁说的?第二段代码是可以运行的,你试试。
回复 使用道具 举报
❦_H_t 发表于 2013-12-13 20:48
你的第一段代码,输出时直接写super.num就可以了
而你第二段代码因为是内部类,所以那样的写法是可以编译通 ...

你试试System.out.println(this == this);和System.out.println(super == super);分别输出啥?为什么?
回复 使用道具 举报
测试,两个都正常编译,运行,都输出10......






评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
barlay 中级黑马 2013-12-13 21:11:55
8#
高亮亮 发表于 2013-12-13 21:07
测试,两个都正常编译,运行,都输出10......

不是吧,难道跟JDK版本有关系?⊙﹏⊙
回复 使用道具 举报
barlay 发表于 2013-12-13 21:11
不是吧,难道跟JDK版本有关系?⊙﹏⊙

你的什么版本?

回复 使用道具 举报
barlay 发表于 2013-12-13 20:59
你试试System.out.println(this == this);和System.out.println(super == super);分别输出啥?为什么? ...

System.out.println(this ==this);//true
System.out.println(super == super);//报错
System.out.println(super.num== super.num);//true
为什么之前已经解释了
回复 使用道具 举报
小楼一夜听春雨 发表于 2013-12-13 21:19
System.out.println(this ==this);//true
System.out.println(super == super);//报错
System.out.printl ...

就是因为super是父类空间标识,就报错?为什么呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马