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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李平 初级黑马   /  2012-4-14 20:16  /  1946 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Person
{
        String name;
        int age;
        public Person(String name, int age) {
                this.name = name;
                this.age = age;
        }
        public void show(int a)
        {
                System.out.println(a);
        }   
}
class Student extends Person
{
        String name;
        int age;
        public Student(String name, int age)
        {
                super(name, age);
        }
        public void show(int a)
        {
                super.show(a);

        }
        
        
}
class PersonDemo
{
        public static void main(String[] args)
        {
                Student s = new Student("lisi",3);
                s.show(1);
        }
}

在Student类中:
super(name, age);    为什么这不能写成super.Person(name,age);
super.show(a);     为什么这不能写成super(a);
为什么这两个地方的调用方式不一样?

10 个回复

倒序浏览
super是父类的引用。
super(name, age);    这就是调用构造函数。(里面可以传参数。不传也行。)
super.show(a);  调用的是父类方法
为什么这不能写成super.Person
为什么这不能写成super(a);
可以这样理解。super()==person()  子类本身就隐藏了一个父类的构造函数调用。super();


评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
super代表的是父类对象,super.Person会是什么意思呢,对象中的类?所以不能这么用。既然super指的是父类对象,那么super.show()就是调用对象中的方法,若写成super(),则虚拟机不会认为要调用show方法,而是对象中默认的没有方法名的代码即构造代码块和构造函数。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
“     super(name, age);    为什么这不能写成super.Person(name,age);super.show(a);     为什么这不能写成super(a);
为什么这两个地方的调用方式不一样?   ”

因为super代表父类,而super.XX()代表的父类方法。
super()代表父类的构造方法(用于给类初始化)。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
Person是构造方法,
super()是就是直接调用父类构造方法,父类里没有有参数的构造方法不能super(a);
show()不是Person的构造方法,
新手见解,楼下补充

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
是不是public Person(String name, int age)是Person类必须有的,老师说过会有默认的Person(){},这个是不是把他覆盖了?
这样理解对吧,和类同名的用super(),其他的就是super.
回复 使用道具 举报
1.super(name, age);    为什么这不能写成super.Person(name,age);
因为super的意思就是代表父类对象,不能理解的话可以吧super替换成person,看是否合理。显然Person.Person(name,age)是不合理的。2.super.show(a);     为什么这不能写成super(a);
同上一问道理一样,super.show(a);肯定不能写成Persen(a);

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
邓斌 中级黑马 2012-4-14 20:44:20
8#
李平 发表于 2012-4-14 20:37
是不是public Person(String name, int age)是Person类必须有的,老师说过会有默认的Person(){},这个是不是 ...

super 是父类的引用。还没懂吗?  吧这句话理解了。就差不多了。
一个类里面都隐藏了一个构造函数。子类都隐藏了一个父类的构造函数。
回复 使用道具 举报
  super是父类的引用,指向父类对象。
在子类调用  super(),表示对父类进行初始化,(就是调用构造函数)。()里面可以传参数,不传也行,但是子类的构造函数前都默认有一条隐式super(),当你在声明时就将默认覆盖了。
super.show(a); 父类对象调用父类方法


希望能解决你的疑惑。我们一起加油。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1 赞一个!

查看全部评分

回复 使用道具 举报
class Person
{
        String name;
        private  int age;
         public Person(String name, int age) {
                 this.name = name;
                this.age = age;
         }
         public void show(int a)
         {
                 System.out.println(a);
         }   
}
class Student extends Person
{
        // String name;
        // int age;
         public Student(String name, int age)
        {
                 super(name, age);
         }
       /*  
             public void show(int a)
          {
                 super.show(a);

          }
         
    */     
}
class PersonDemo
{
         public static void main(String[] args)
         {
                 Student s = new Student("lisi",3);
                 s.show(1);
         }
}
回复 使用道具 举报
啷个里个郞 发表于 2012-4-14 21:27
class Person
{
        String name;

简单的优化一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马