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");
}
}
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");
}
}
s1 = "asdasf"; //这句就报错:找不到标识符。s1是先继承父类的变量啊!!,这是为什么呢?? 不能这样写,语法错误。c(){
// s1 = "aaaaa"; // 而把这行的注释去掉就能执行,为什么在方法里又能用s1了呢??
System.out.println(s1);
.....................
=====================
看看书就明白了
String s1 = "xxxxxxxxx";
改写成
String s1 = "asdasf"; // 这里要明确s1 是什么类型的,它父类确实有成员变量s1,并有值,但按照你的想法,在类c里继承父类的成员变量c ,并且改变它的值,因为初始化c类的时候,s1 没有它的类型,所以报错!
还有// s1 = "aaaaa"; // 而把这行的注释去掉就能执行,为什么在方法里又能用s1了呢??
这段代码有无注释,跟上面出错没影响的!
这跟s1写在哪没关系
所在的位置属于定义块,
如果不能用父类的对定义的对象,
那
System.out.println(s1);
也会出错的呀.....
这样的赋值代码不能直接写在类声明里,写构造方法内部应该可以
你这样写的意思是在class c中声明一个s1,并赋值"asdasf",作为声明的话,当然缺少了String。
如果想给从class a继承的s1赋值,把这句写在构造函数里就不会有问题了。
就是说你可以在构造函数里重新赋值“aaaaa”使用,也可以直接打印,直接打印出来的s1就是你在a类中的初始赋值了。
即成功继承了。
就是这样,其实只要是方法里就可以。
你不想写在方法里,可以用实例初始化
class c extends b{
{
s1 = "some";
}
//your code
}