黑马程序员技术交流社区

标题: 继承和super关键字的小问题。 [打印本页]

作者: 李哲    时间: 2012-3-27 23:37
标题: 继承和super关键字的小问题。
class Person
{
        String name;
        Person(String name)
        {
                this.name=name;
        }
        public String getName()
        {
                return name;
        }
}

class Student extends Person
{
        Student(String name)
        {
                super(name);        //请问这句话是不是和this.name=name;相同呢?
        }
}

还有Person的String name;这句话是不是也被student继承了?成员变量String name;也可以被继承吧?诶,我都晕了。不好意思。

作者: 王亚男    时间: 2012-3-27 23:45
这句的意思就是调用父类的构造参数,也就是本例中的
Person(String name)
        {
                this.name=name;
        }
子类构造参数定义了个局部变量name,传给父类,由父类去完成。说白了就是父类已经有这功能,直接用就可以了。
作者: 和心愿    时间: 2012-3-28 00:10
这句话是调用父类的构造方法
作者: 和心愿    时间: 2012-3-28 00:10
package bbs;
class Animal
{
        String name ="ani";
        int age = 3;
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }
       
        Animal()
        {}
        Animal(int age )
        {
                this();
                this.age = age;
               
        }
        Animal(String name,int age)
        {
                this(age);
                this.name = name;
        }
        public void show()
        {
                System.out.println(this.getName()+this.getAge()+"--------------");
        }

}
class Dog extends Animal
{
        String name ="dog";
        int age = 6;
        Dog()
        {
                super();
        }
        Dog(int age)
        {
                super(age);
        }
        Dog(String name,int age)
        {
                super(name,age);
        }
        public void show()
        {
                System.out.println(this.getName()+this.getAge()+"+++++++++++++++");
        }
}


public class SuperDemo {
        public static void main(String[] args) {
                Animal a1 = new Animal();
                Animal a2 = new Animal(23);
                Animal a3 = new Animal("jaja",25);
                a1.show();
                a2.show();
                a3.show();
                Dog d1 = new Dog();
                Dog d2 = new Dog(1);
                Dog d3 = new Dog("wangcai",5);
                d1.show();
                d2.show();
                d3.show();
        }

}

作者: 蒙武辉    时间: 2012-3-28 00:18
  //请问这句话是不是和this.name=name;相同呢?
是子类调用父类的已有的构造函数去给自己的成员变量初始化。
作者: 方江    时间: 2012-3-28 05:45
你记住几点就行,父类中的函数,子类是全部都继承了的,return name,也不例外啊。打个比方,一个父类,他要有多个子类怎么办?那他的内容就必须需是子类都能够继承的。不可能说,一只狗的子类成一只猪了。其实就是继承跟多态。你 要用 super就是把父类中的name直接调用了。你要用this就是本类了。代码虽然重要,理论也不要放着不管啊。
作者: 杨华威    时间: 2012-3-28 11:11
Student(String name)
        {
                super(name);        //请问这句话是不是和this.name=name;相同呢?
        }
super()和this.name=name;功能相同。都是去父类person那里给对象此时花赋值。
只是,super()只能出现在第一句。

String name是被子类继承了。
父类所有的共有方法、共有变量,都是被子类所继承的。私有和被保护的不可以。
作者: 郑洋洋    时间: 2012-3-28 12:24
你的Student类继承了Person类,同时你相当于重写了父类的构造函数,只是并没有增加新的内容,而是直接调用了父类的构造函数
作者: 李井山    时间: 2012-3-28 12:48
   //请问这句话是不是和this.name=name;相同呢?    相同的。
还有Person的String name;这句话是不是也被student继承了?     是     成员变量String name;也可以被继承吧? 可以
要理解继承很简单,就是子类继承了父类的属性和方法,但他也可以修改和增加这些属性和方法
作者: izwj    时间: 2012-3-28 13:19
子类中所有的构造函数默认第一行都是super();
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。即super(name);
super(name)的作用是调用父类对应构造函数初始化本类对象;
和this.name=name作用一样的。

子类继承父类非私有成员变量和成员方法。即成员变量String name;也可以被继承。

作者: 翟友伟    时间: 2012-3-28 13:27
super(name);
super父亲  
name
以name为参数的和父亲同样的 构造函数




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