黑马程序员技术交流社区

标题: 关于super的一个理解不能的问题 [打印本页]

作者: barlay    时间: 2013-12-13 20:40
标题: 关于super的一个理解不能的问题
  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到底是个什么东西?请高手解答!
作者: ❦_H_t    时间: 2013-12-13 20:48
你的第一段代码,输出时直接写super.num就可以了
而你第二段代码因为是内部类,所以那样的写法是可以编译通过的。
要说super就先要说this,this代表的是哪个对象调用它,就代表是哪个对象。
而与this不同的是,super表示的是父类的。
作者: 小楼一夜听春雨    时间: 2013-12-13 20:53
你的错误: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();
        }
}

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

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

你试试System.out.println(this == this);和System.out.println(super == super);分别输出啥?为什么?
作者: 高亮亮    时间: 2013-12-13 21:07
测试,两个都正常编译,运行,都输出10......







作者: barlay    时间: 2013-12-13 21:11
高亮亮 发表于 2013-12-13 21:07
测试,两个都正常编译,运行,都输出10......

不是吧,难道跟JDK版本有关系?⊙﹏⊙
作者: 高亮亮    时间: 2013-12-13 21:14
barlay 发表于 2013-12-13 21:11
不是吧,难道跟JDK版本有关系?⊙﹏⊙

你的什么版本?


作者: 小楼一夜听春雨    时间: 2013-12-13 21:19
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:22
小楼一夜听春雨 发表于 2013-12-13 21:19
System.out.println(this ==this);//true
System.out.println(super == super);//报错
System.out.printl ...

就是因为super是父类空间标识,就报错?为什么呢?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2