public class BaseClass{
int i = 2;
public void func(){
System.out.println("BaseClass func");
}
}
class SubClass extends BaseClass{
int i = 4;
public void func(){
System.out.println("SubClass func");
}
public static void main(String[] args) {
BaseClass bc = new SubClass();
bc.func();
System.out.println(bc.i);
}
}这段代码,如果用记事本另存为BaseClsas.java,
然后在命令行里面:
javac BaseClass.java
java SubClass
就会有如下结果:
SubClass func
2
但是如果在IDE里面,
例如edicplus或者myeclipse里面,
文件名取为BaseClass
是无法正常运行的,是不是因为IDE默认进行如下操作:
javac BaseClass.java
java BaseClass还是有另外的办法在IDE里面运行该程序?
当然,不能改变该程序。注:如果去掉BaseClass的修饰符public ,
将文件名去为SubClass,
就可以在IDE里面成功运行了。
但我问的是不改变源程序。还有一个问题,
为什么bc.i是父类的i呢?不会被覆盖吗
int i = 2;
public void func(){
System.out.println("BaseClass func");
}
}
class SubClass extends BaseClass{
int i = 4;
public void func(){
System.out.println("SubClass func");
}
public static void main(String[] args) {
BaseClass bc = new SubClass();
bc.func();
System.out.println(bc.i);
}
}这段代码,如果用记事本另存为BaseClsas.java,
然后在命令行里面:
javac BaseClass.java
java SubClass
就会有如下结果:
SubClass func
2
但是如果在IDE里面,
例如edicplus或者myeclipse里面,
文件名取为BaseClass
是无法正常运行的,是不是因为IDE默认进行如下操作:
javac BaseClass.java
java BaseClass还是有另外的办法在IDE里面运行该程序?
当然,不能改变该程序。注:如果去掉BaseClass的修饰符public ,
将文件名去为SubClass,
就可以在IDE里面成功运行了。
但我问的是不改变源程序。还有一个问题,
为什么bc.i是父类的i呢?不会被覆盖吗
解决方案 »
- 100分! JFreeChart 生成的图片在JSP中引用显示不出来!
- 请高手指教一下,程序出问题了 急啊
- 正则表达式改错 100分! 前2个100分 已经结贴。
- java最简单的问题!!求求大家了!
- 如何把yyyy-MM-dd HH:mm格式日期转为时间戳
- 读取.CSV文件
- java有没有预置好的,像swing包裹里面的JColorChooser一样方便的字体对话框?
- 请大家提供一个Jive Version: 2.1.1 的源代码!100分奉送
- 百思不得其解,请教各位大侠
- <<thinking in java>>中文电子版中没有源码和图表怎么办啊!
- 我想做一个基于ssh框架的web系统,选择 办公自动化 这个题目好实现吗?
- 如何在我的JAVA程序启动时中检测我的程序已经在运行?
这个应该是向上类型转换
另外,bc是一个BaseClass类的对象引用,但引用的是其子类SubClass的对象,因为SubClass is a BaseClass。
在访问bc的方法时会发生动态绑定(多态现象),实际执行的是SubClass类对象的方法。但是请记住,只用访问方法才可能发生多态现象,访问变量时,编译器并没有动态绑定啊。所以,bc.i就是父类的i.
那么你的main函数就写到 BaseClass里。不管怎样 i 的属性是BaseClass的值。
那么你的main函数就写到 BaseClass里。不管怎样 i 的属性是BaseClass的值。