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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© foreverfun 中级黑马   /  2015-9-19 21:01  /  452 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

super关键字到底是什么,怎么去理解呢?this关键字代表本类对象的引用,可以用打印语句打印出地址值,与它所对应的对象地址值是一样的,那么,可以将super打印吗?打印出来的是什么东西?还有就是this可以调用父类的一般方法,这句话是正确的吗?

13 个回复

倒序浏览
super就是父类引用对象,,,调用方法和this一样。 this不可以调用父类,如果要用父类就用super,只能super。
回复 使用道具 举报
this的作用执行的是创建此对象的类的成员,super指向的是父类所在的空间,调用父类的内容就用super。所以应该是可以打印出来的。
回复 使用道具 举报
本帖最后由 Marx_D 于 2015-9-20 00:00 编辑

  • super是父类内存空间的标识,this代表本类对象的引用。
  • 在继承体系中,子类可以使用父类的非私有成员,所以也就可以调用父类的非私有方法;
  • super一般来说用于子类构造函数中,调用父类的带参构造对子类进行初始化
  • 另外,可以用super和this区分同名成员变量。。
回复 使用道具 举报
  1. class Fu {
  2.         public int x = 10;
  3.         public Fu(){
  4.         }
  5.         public Fu(int x) {
  6.                 System.out.println("Fu……" + x);
  7.         }
  8.         public void show() {
  9.                 System.out.println("Fu……show");
  10.         }
  11. }

  12. class Zi extends Fu {
  13.         public int x = 20;
  14.         public Zi() {
  15.                 super(10);                // Fu……20,创建对象的时候,会先去对父类进行初始化。
  16.                 System.out.println("Zi……x" +x);        // 20
  17.                 System.out.println("Zi……x" + this.x + " -- Fu……x" + super.x);
  18.                 this.show();    //  Zi……show,如果子类没有同名的show,就会去调用父类的show()
  19.                 super.show();        // Fu……show
  20.                 System.out.println(this);// Zi@5a20d10a
  21.           //System.our.println(super);// 报错
  22.         }
  23.         public void show() {
  24.                 System.out.println("Zi……show");
  25.         }
  26. }
  27. class Demo {
  28.         public static void main(String[] args) {
  29.                 Zi zi = new Zi();
  30.         }
  31. }
复制代码


回复 使用道具 举报
我来看看答案
回复 使用道具 举报
super关键字场景是发生在子类和父类之间,用于指明我(super)后面的信息直接跳过我从我父类里面找吧。this调用方法完全和子类引用调用方法效果一样。
回复 使用道具 举报
楼上是正解
回复 使用道具 举报
顶顶....
回复 使用道具 举报
我来看答案的
回复 使用道具 举报

是啊,super如果拿来打印的时候就会报错,所以不是很理解
回复 使用道具 举报
安仔 发表于 2015-9-19 21:52
this的作用执行的是创建此对象的类的成员,super指向的是父类所在的空间,调用父类的内容就用super。所以应 ...

我以前也认为能打印出来,实际上如果将super打印是错误的
回复 使用道具 举报
foreverfun 发表于 2015-9-20 20:25
我以前也认为能打印出来,实际上如果将super打印是错误的

this:代表的是本类的对象的引用。
super:代表的是父类的内存空间。
这个解释应该是没有错的,真想研究的话,去API里查下super可能更快
回复 使用道具 举报
this可以掉用父类的方法 这个方法如果子类有父类木有的话  new 对象时候 会继承父类的方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马