class a{
int num1 = 10,num2,num3;
String s1= "s1s1s1s1",s2,s3;
a(){
System.out.println("a");
}
}
class b extends a{
b(){
// System.out.println("dfff");
}
}
class c extends b{
s1 = "asdasf";  //这句就报错:找不到标识符。s1是先继承父类的变量啊!!,这是为什么呢?? c(){
// s1 = "aaaaa";  // 而把这行的注释去掉就能执行,为什么在方法里又能用s1了呢??
System.out.println(s1);

}
public static void main(String[] arg){
new c();
System.out.println("main");

}
}

解决方案 »

  1.   

    class c extends b{
    s1 = "asdasf";  //这句就报错:找不到标识符。s1是先继承父类的变量啊!!,这是为什么呢?? 不能这样写,语法错误。c(){
    // s1 = "aaaaa";  // 而把这行的注释去掉就能执行,为什么在方法里又能用s1了呢??
    System.out.println(s1);
    .....................
    =====================
    看看书就明白了
    String s1 = "xxxxxxxxx";
      

  2.   

    s1 = "asdasf";  //这句就报错:找不到标识符。s1是先继承父类的变量啊!!,这是为什么呢?? 
    改写成
    String s1 = "asdasf";  // 这里要明确s1 是什么类型的,它父类确实有成员变量s1,并有值,但按照你的想法,在类c里继承父类的成员变量c ,并且改变它的值,因为初始化c类的时候,s1 没有它的类型,所以报错!
    还有// s1 = "aaaaa";  // 而把这行的注释去掉就能执行,为什么在方法里又能用s1了呢?? 
    这段代码有无注释,跟上面出错没影响的!
      

  3.   

    LS说的对啊,就是少一个String 
    这跟s1写在哪没关系
      

  4.   

    s1 = "asdasf";  //这句就报错:找不到标识符。s1是先继承父类的变量啊!!,这是为什么呢?? 这个s1是你在b类的定义的位置呀,
    所在的位置属于定义块,
    如果不能用父类的对定义的对象,

    System.out.println(s1); 
    也会出错的呀.....
      

  5.   

    s1 = "asdasf"; 
    这样的赋值代码不能直接写在类声明里,写构造方法内部应该可以
      

  6.   

    s1 = "asdasf"; 
    你这样写的意思是在class c中声明一个s1,并赋值"asdasf",作为声明的话,当然缺少了String。
    如果想给从class a继承的s1赋值,把这句写在构造函数里就不会有问题了。
      

  7.   

    写在c类的声明里面自然会提示你需要给一个类型给s1,不要那个声明,直接在c类的方法里使用是可以的。
    就是说你可以在构造函数里重新赋值“aaaaa”使用,也可以直接打印,直接打印出来的s1就是你在a类中的初始赋值了。
    即成功继承了。
      

  8.   


    就是这样,其实只要是方法里就可以。
    你不想写在方法里,可以用实例初始化
    class c extends b{
      {
        s1 = "some";
      }
      //your code
    }