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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李哲 中级黑马   /  2012-3-27 23:37  /  2414 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;也可以被继承吧?诶,我都晕了。不好意思。

11 个回复

倒序浏览
这句的意思就是调用父类的构造参数,也就是本例中的
Person(String name)
        {
                this.name=name;
        }
子类构造参数定义了个局部变量name,传给父类,由父类去完成。说白了就是父类已经有这功能,直接用就可以了。
回复 使用道具 举报
这句话是调用父类的构造方法
回复 使用道具 举报
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();
        }

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

String name是被子类继承了。
父类所有的共有方法、共有变量,都是被子类所继承的。私有和被保护的不可以。
回复 使用道具 举报
你的Student类继承了Person类,同时你相当于重写了父类的构造函数,只是并没有增加新的内容,而是直接调用了父类的构造函数
回复 使用道具 举报
朱俊 中级黑马 2012-3-28 12:29:31
9#
本帖最后由 朱俊 于 2012-5-16 15:04 编辑

~~~~~~~~~~~~~`
回复 使用道具 举报
   //请问这句话是不是和this.name=name;相同呢?    相同的。
还有Person的String name;这句话是不是也被student继承了?     是     成员变量String name;也可以被继承吧? 可以
要理解继承很简单,就是子类继承了父类的属性和方法,但他也可以修改和增加这些属性和方法
回复 使用道具 举报
izwj 中级黑马 2012-3-28 13:19:25
11#
子类中所有的构造函数默认第一行都是super();
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。即super(name);
super(name)的作用是调用父类对应构造函数初始化本类对象;
和this.name=name作用一样的。

子类继承父类非私有成员变量和成员方法。即成员变量String name;也可以被继承。
回复 使用道具 举报
super(name);
super父亲  
name
以name为参数的和父亲同样的 构造函数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马