黑马程序员技术交流社区

标题: super小问题 [打印本页]

作者: xieguanxiong    时间: 2012-3-2 12:24
标题: super小问题
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);//问题1:为什么这不能写成super.Person(name,age);
        }
        public void show(int a)
        {
                super.show(a);//问题2:为什么这不能写成super(a);

        }
       
       
}
class PersonTest
{
        public static void main(String[] df)
        {
                Student s = new Student("zhansan",12);
                s.show(1);
        }
}


作者: 王亚男    时间: 2012-3-2 15:01
1.super();本身就是用来表示父类构造方法的,所以,在使用父类构造方法时,需要用super();  而在本类中,Person是父类,它的构造函数则是public Person(String name, int age),所以在子类中调用父类构造参数时使用super(name, age) 因为super()本身就是父类构造函数了,所以不需要使用super.Person();  
2.show()方法是你父类中的一个普通的方法,在调用时,需要有一个对象来调用,如你在别的类中要使用Person类中的show()方法,就先要创建Person类的对象:Person p =new Person();  然后再p.show();  而本例中,super代表的就是父类的对象,因为他们之间有继承关系,所以子类访问父类时可以用super来表示,故使用super.show();如果使用super(a)调用的依然是父类中一个参数的构造函数,本例中没有那个构造函数。
作者: 黄业凌    时间: 2012-3-2 17:14
1、super()本身就是父类构造方法
2.  问题1:为什么这不能写成super.Person(name,age);//等于父类引用对象.父类构造函数(参数列);
3. 为什么这不能写成super(a);//show()是子类中的一个普通方法,而super是调用父类的构造方法
想将参数传入show()中,创建子类对象,再 对象.方法(参数)即可。
自己的理解,希望可以帮咱你.{:soso_e117:}

作者: 泮和顺    时间: 2012-3-2 20:39
super跟this用法类似 一个是父类对象 一个是本类对象,竟然是对象 构造函数和成员函数的规范写法就分别是super(构造参数列表) 和super.method();




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