黑马程序员技术交流社区

标题: super 问题 求技术分。 [打印本页]

作者: 赵志勇    时间: 2012-5-5 10:56
标题: super 问题 求技术分。
今天看到泛型限定,关于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); 执行完后,是什么结果呢?
十分感谢回答者。





作者: 倪杭乘    时间: 2012-5-5 11:11
super.name是调用了父类的name成员变量
super(name) 是子类调用了父类有String name的构造函数
Person(String name)
作者: 王敏NO.09    时间: 2012-5-5 11:23
Super(name),“显示调用”父类中参数类型为name的构造函数
如果父类无参,可‘隐式调用’或‘显式调用’不带参数的super()

作者: 付左军    时间: 2012-5-5 23:07
super()调用父类构造函数
作者: 韩新凯    时间: 2012-5-6 12:54
class Student extends Person
{
     Student (String name)
      {
         super.name;//会出错。
        super(name);//正确,调用父类的构造方法
       }
}
作者: 赵志勇    时间: 2012-5-6 16:31
韩新凯 发表于 2012-5-6 12:54
class Student extends Person
{
     Student (String name)

super.name;//会出错。
为什么呢?
作者: 韩新凯    时间: 2012-5-6 22:40
本帖最后由 韩新凯 于 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去调用父类的方法。这样你应该能明白了。

作者: 永恒之翼网络    时间: 2012-5-6 23:13
可以的,super.name是调用父类Person的成员变量name,super(name)是调用Person的构造函数 Person(String name),super(name)的运行结果是在栈内存中新建了一个Person类的实例对象。
作者: 赵志勇    时间: 2012-5-7 08:22
韩新凯 发表于 2012-5-6 22:40
额,建议去看看毕老师关于super还有this的视频
静态方法中不能用super。
class Person {

我上边的代码没有静态。
作者: 韩新凯    时间: 2012-5-7 13:02
赵志勇 发表于 2012-5-7 08:22
我上边的代码没有静态。

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

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

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

谢谢啊。




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