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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵志勇 中级黑马   /  2012-5-5 10:56  /  2899 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看到泛型限定,关于super 的用法有写疑问,如下:

class Person
{
      private String name;
      Person(String name)
     {
      this.name=name;
      }
    public String getName()
     {
      return name;
      }
}
class Student extends Person
{
     Student (String name)
      {
         super (name);
       }
}

请问这个super 可以这么用吗?记得是:super. name;   
假如这么用可以,那么super(name); 执行完后,是什么结果呢?
十分感谢回答者。




评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 建议楼主把基础视频前面看看吧,保证你收获.

查看全部评分

10 个回复

倒序浏览
super.name是调用了父类的name成员变量
super(name) 是子类调用了父类有String name的构造函数
Person(String name)

点评

明白  发表于 2012-5-5 11:38
回复 使用道具 举报
Super(name),“显示调用”父类中参数类型为name的构造函数
如果父类无参,可‘隐式调用’或‘显式调用’不带参数的super()

点评

理解  发表于 2012-5-5 11:38
回复 使用道具 举报
super()调用父类构造函数
回复 使用道具 举报
class Student extends Person
{
     Student (String name)
      {
         super.name;//会出错。
        super(name);//正确,调用父类的构造方法
       }
}
回复 使用道具 举报
韩新凯 发表于 2012-5-6 12:54
class Student extends Person
{
     Student (String name)

super.name;//会出错。
为什么呢?
回复 使用道具 举报
本帖最后由 韩新凯 于 2012-5-6 23:06 编辑
赵志勇 发表于 2012-5-6 16:31
super.name;//会出错。
为什么呢?


额,建议去看看毕老师关于super还有this的视频
静态方法中不能用super。
class Person {
public static String name;
Person(String name) {
  this.name = name;
}
public String getName() {
  return name;
}
}
public class StudentTest extends Person {
// public String name = "aaa";如果有这条语句的话,
// StudentTest st = new StudentTest("hah");输出的结果是:aaa。
StudentTest(String name) {
  super(name);
  super.name = name;// 没有意义
  // TODO Auto-generated constructor stub
}
public void test() {
  System.out.println(super.name);
}
public static void main(String[] args) {
  StudentTest st = new StudentTest("hah");
  System.out.println(st.name);//hah
  st.test();//hah
}
}
你可以再尝试着用super去调用父类的方法。这样你应该能明白了。
回复 使用道具 举报
可以的,super.name是调用父类Person的成员变量name,super(name)是调用Person的构造函数 Person(String name),super(name)的运行结果是在栈内存中新建了一个Person类的实例对象。
回复 使用道具 举报
韩新凯 发表于 2012-5-6 22:40
额,建议去看看毕老师关于super还有this的视频
静态方法中不能用super。
class Person {

我上边的代码没有静态。
回复 使用道具 举报
赵志勇 发表于 2012-5-7 08:22
我上边的代码没有静态。

在你的那个子类的构造方法中可以这么写:super.name = name;但是这么写没有意义。

强烈建议楼主看毕老师的视频!还有问题的话就去看看视频吧,楼上的朋友已经说的很清楚了。
回复 使用道具 举报
韩新凯 发表于 2012-5-7 13:02
在你的那个子类的构造方法中可以这么写:super.name = name;但是这么写没有意义。

强烈建议楼主看毕老师 ...

谢谢啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马