比较简单的一个题目.
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