我刚开始学java,到继承这里看书上一个例程,试了一下却发生了以下问题:
--------------------Configuration: <Default>--------------------
java.lang.NoSuchMethodError: main
Exception in thread "main"
Process completed.
以上是在Jcreat Pro4中运行的结果,JDK安装正确,系统环境变量的设置也没有问题,所以请各位高手帮忙指点迷津,不胜感激,谢谢!
源文件如下:
//extend.java
class A
{String a="class A";
}
class B extends A
{String b="class B";
}
public class extend
{public static void main (String[] args) {
A a1,a2=new A();
B b1,b2=new B();
a1=b2;
b1=(B)a2;
System.out.println(a1.a);
System.out.println(b1.b);
}
}
--------------------Configuration: <Default>--------------------
java.lang.NoSuchMethodError: main
Exception in thread "main"
Process completed.
以上是在Jcreat Pro4中运行的结果,JDK安装正确,系统环境变量的设置也没有问题,所以请各位高手帮忙指点迷津,不胜感激,谢谢!
源文件如下:
//extend.java
class A
{String a="class A";
}
class B extends A
{String b="class B";
}
public class extend
{public static void main (String[] args) {
A a1,a2=new A();
B b1,b2=new B();
a1=b2;
b1=(B)a2;
System.out.println(a1.a);
System.out.println(b1.b);
}
}
a2是A型的对象,不能赋给一个B的引用
B b1=(B)a1;就是说一个引用只能指向同样的对象,或是子类的对象,instanceof返回true的才行
A a1,a2=new A();
B b1,b2=new B();
a1=b2
b1=(B)a2
==============
a1=b1;之所以正确是应为B是A的子类,A的对象可以指向子类对象的引用,例如,你可以
A a=new B();这叫向上转型,a 可以强制转换为B。
而对于b1=(B)a2,可以理解为a2的范围比b1 大,子类对象可以泛化为超类,而反过来就不行。