比如一个Person类
里面声明2个成员变量name,agename和age肯定是要private的,防止别人输入例如小于0的age。如果按照这个方法,我子类Student继承父类,不是又要重新声明name和age,这样的话不是很麻烦吗有没有一个方法,让子类继承父类的name和age变量的同时,又防止别人输入非法的值今天问了下老师,他跟我说用抽象类可以解决我想了一下也不行啊,貌似继承了抽象父类的成员变量,在类的外部还是可以随便访问的啊肯定有解决的方法的。是什么方法啊,有代码例子最好了。

解决方案 »

  1.   

    我觉得可以在父类方法里加一些判断就可以了public class Test { 
    public static void main(String[] args) {
    Student s = new Student();
    s.setAge(-1);
        }
    }class Student extends Person {

    }class Person {
    private String name;
    private int age;

    public String getName() {
    return this.name;
    }

    public int getAge() {
    return this.age;
    }

    public void setName(String name) {
    this.name = name;
    }

    public void setAge(int age) {
    if (age < 0) 
    throw new java.lang.IllegalArgumentException("年龄无效");
    this.age = age;
    }
    }
    返回结果Exception in thread "main" java.lang.IllegalArgumentException: 年龄无效
        at Person.setAge(Test.java:38)
        at Test.main(Test.java:12)
      

  2.   

    基类中设置getter/setter就可以了。
      

  3.   

    不是很懂!class Person {
    private int age;
    private String name;
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    if(age < 0) {
    throw new RuntimeException("Age is less than 0");
    }
    this.age = age;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    }class Student extends Person {
    //在这里根本就不用再声明什么age、name啊
    //要做什么通过方法操作就行了,还是我不明白你的意思
    public String toString() {
    return getAge() + getName();
    }
    }
      

  4.   

    你们误解我意思了,如果父类封装了,子类就无法继承父类的name,age的成员变量了,那不是很麻烦
      

  5.   

    就直接说你有什么需求吧
    age和name其实是被继承了
    只是不能直接访问而已
    要通过方法访问
      

  6.   

    子类Student继承父类Person的时候,已经继承了父类的实例域name和age,由于name和age的属性是private,所以,子类Student无法直接访问name和age。在父类中应该定义相应的public属性的get方法和set方法,在子类Student中用set方法和get方法访问name和age。
    你问的问题好像大家都没大听明白,重述一下。