注册 登录
编程论坛 JAVA论坛

老师让我们写的较简单的一个程序,但有问题,求大神解答

选调生 发布于 2017-03-19 20:12, 1928 次点击
//写一个关于家庭成员类,我用JCreator写的
class Human{
    String name;
    int age;
    char identity;  //家庭身份
   
    public Human(String name,int age,char identity){
        this.name=name;
        this.age=age;
        this.identity=identity;
    }
   
    public String getName(){
        return name;
    }
   
    public int getAge(){
        return age;
    }
   
    public char getIdentity(){
        return identity;
    }
   
    public void setName(String name){
        this.name=name;
    }
   
    public void setAge(int age){
        this.age=age;
    }
   
    public void setIdentity(char identity){
        this.identity=identity;
    }
}

class Family extends Human{
    public Family(String name1,int age1,char identity1){
        name=name1;
        age=age1;
        identity=identity1;
    }
}
5 回复
#2
qq8078867272017-03-20 12:53
我懂你意思,你想用子类的构造方法里面的成员指向父类。
你要清楚每个方法里的变量默认都是局部变量,是不能直接引用到其他类里面的,所以你子类构造方法的name,age,identity并不是父类中的name,age,identity。
要继承父类的构造方法属性,用super关键字就行了。
class family extends Human{
    public family(String name,int age,char identity){
        super(name,age,identity);
    }
}
#3
will丶2017-03-20 20:26
以下是引用qq807886727在2017-3-20 12:53:43的发言:

我懂你意思,你想用子类的构造方法里面的成员指向父类。
你要清楚每个方法里的变量默认都是局部变量,是不能直接引用到其他类里面的,所以你子类构造方法的name,age,identity并不是父类中的name,age,identity。
要继承父类的构造方法属性,用super关键字就行了。
class family extends Human{
    public family(String name,int age,char identity){
        super(name,age,identity);
    }
}

正解,建议你仔细看下super和this的区别,这个老师应该会讲到吧
#4
九转星河2017-03-21 10:07
九九来学Java啦~这个九九也知道~this就是自己的东西~super就是指父亲的东西~
#5
HolyOrder2017-03-21 22:54
2楼正解!建议把父类的属性私有化!
#6
纵横阳仔2017-03-22 09:59
这个问题的关键不是这里,而是在你创建这个构造方法的时候,系统会自动帮你添加一个调用父类构造方法的super();即
 public Family(String name1,int age1,char identity1){
       super();
        name=name1;
        age=age1;
        identity=identity1;
    }
但是你的父类并没有空参构造方法,所以会报错,但这不是错误的根本.你可以在父类添加空参构造方法.
楼上的解决思路是简化代码的最佳选择.但不是最合适的方法.
我们在创建标准类时,一般提供一个空参和一个人满参构造方法.而且会将成员属性私有化,以体现封装的思想.

[此贴子已经被作者于2017-3-22 10:05编辑过]

1