1,
public Foo(int i){
this.i=i;
}
构造函数没有public
2,
public Bar(int i,int j){
super(i);
this.j=j;
}
同上
3,
System.out.println(f1.value());
输出的是INT不是string要转型
public Foo(int i){
this.i=i;
}
构造函数没有public
2,
public Bar(int i,int j){
super(i);
this.j=j;
}
同上
3,
System.out.println(f1.value());
输出的是INT不是string要转型
1.父类没有无参的构造方法,所以public Bar(){}会出错
2.return i+2.0; i是父类的private属性,无法直接访问
3.f1.value() f1已经上溯成为Foo的实例,无法访问子类的value方法
符号: 构造函数 Foo()
位置: 类 Foo
public Bar(){});
第二个,你的Foo中的i成员变量是private的,这样的成员是不能被子类继承的,而你在子类Bar中却引用了(public double getI(){
return i+2.0;
}),这会给你一个编译期的错误;
第三个,你的Foo类没有定义value()方法,但是你在你的main函数中却引用了这个方法,会引起一个找不到符号的编译器错误。虽然你的f1在构建的时候是用Bar类构建的(Bar中存在value()函数,但是因为你进行了类型转换,转换为了Foo类,所以在引用的时候要按照Foo类的对象规则引用,也就是在转换的时候f1已经把Bar特有的信息抛弃了,而变成一个Foo类实例了)
至于第四个语法、语义上的错误我没找到,但是如果你把上面的代码存储到一个java文件中(比如叫Bar.java),那么你就需要把Foo类前面的public去掉,因为一个java文件中只能存在一个public class,但是这个我觉得不是一个明确的错误,因为没告诉你是否两段代码存储到一个java源文件中。