2. 给定下列代码:
1 class Parent {
2 private String name;
3 public Parent(){}
4 }
5 public class Child extends Parent {
6 private String department;
7 public Child() {}
8 public String getValue(){return name;}
9 public static void main(String arg[]){
10 Parent p = new Parent();
11 }
12 }
上述代码的那些行将会导致错误?为什么?

解决方案 »

  1.   

    8 public String getValue(){return name;}
    上面这行会导致错误。
    因为name是父类的私有成员,在子类中看不到。
      

  2.   

    8 public String getValue(){return name;}
    children 看不到 parent的privte属性。
      

  3.   

    答案正确。
    附带问一个与这个主题无关的问题
    public String s(){}
    这句话是什么意思?
    我记得还看到过public Static s(){}
    String和Static定义方法?
    这是啥意思?不理解
      

  4.   

    public String getValue(){return name;}
    children 中看不到 parent的privte属性。
      

  5.   

    public String getValue(){return name;}
    children 中看不到 parent的privte属性。
      

  6.   

    一个子类是一个超类的特定版本,它继承了超类定义的所有实例变量和方法,同时添加了它自己的独一无二的元素。但是,尽管一个子类包括其超类的所有成员,但它不能访问声明为private的超类成员。
    所以问题所在是第8行:子类Child的成员方法getValue()访问了超类的私有private变量。把超类中的变量name声明为public类型就行了,或者直接去掉private就行了,java中默认的类型就是public
    附加问题:public String s(){}是一个public类型的方法,其返回值的类型是String;
              public static s(){}是一个用关键字static修饰的方法,被static修饰的变量和方法可以看成是全局变量和方法,类本身和所有实例都共享一个static变量、方法;只能访问其他被static修饰的变量和方法;不能以任何形式调用this、super;在定义static方法、变量的类的外面,可以独立于任何对象使用,仅需要使用它们的类名和一个点运算符。
    另外,如果声明static变量时没有初始化,而后面想对它赋值必须通过一个static块来赋值。
    例:
    class A
    {
       static int a=10;
       static int b; //没有初始化
       static //通过static块来给static变量赋值
       {
           b=a*2;
       }
       
       staic print_ab()  //static 方法
       {
           System.out.println("a:"+a);
           System.out.println("b:"+b);
       }
    }
    public class StaticDemo
    {
       public static void main(String[] args)
       {
          A.print_ab();  /*访问static方法可以独立于任何对象,只需要指定它的类名,以及后面跟一个点运算符*/
       }
    }运行结果:
    a:10
    b:20