日期:2014-05-20  浏览次数:20777 次

比较简单的一个题目.
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   }
上述代码的那些行将会导致错误?为什么?

------解决方案--------------------
一个子类是一个超类的特定版本,它继承了超类定义的所有实例变量和方法,同时添加了它自己的独一无二的元素。但是,尽管一个子类包括其超类的所有成员,但它不能访问声明为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