【发布时间】:2014-02-19 19:32:38
【问题描述】:
我和我的同学(CS 一年级)正在为问题课程和子课程而苦苦挣扎。 我们有一个测试,其中一个问题检查对类、子类、它们之间的合法和非法转换等的理解。 问题通常是相同的: 您有 2-3 个名为 A、B、C 的类,其中一些扩展了其他类,然后是不同的构造函数和 10-15 行非常令人困惑的代码,我们需要在每一个上判断它是否会导致其中一个下列的: 1.运行时错误。 2.编译错误。 3. 将运行(将打印出什么)。
考试只进行纸质考试。 问题是,你有跟踪不同类和变量的方法吗?有没有教授这些科目的网站?
这是上一个测试的问题: 以下哪几行代码会导致编译错误,运行时错误,会打印什么:(我添加了解决方案)
A a = new A(1,2);
B b = new B(1,2,3);
C c = new C(1,2);
A bb = (A) b;
A a1;
A a2 = null;
System.out.println("Hello world"); //"Hello World
System.out.println(Hello world); //Compilation error
System.out.println(1/0); //Runtime Error
a = b; //Will run with no errors
a.equals(a1); //compilation error
System.out.println(a.equals(a2));//will print false.
System.out.println(b.equals(c)); //will print true.
B aa = (B) a; //runtime error.
C bbb = (C) bb; //runtime error
C ccc = (C) b; //compilation error
a.m1(); //will print m2
b.m1(); //will print 3
c.m3(); //will print 2.
a.m5(); //will print false
A类:
public class A {
private int x;
public int y;
private C c = null;
public A(int x,int y){
this.x = x;
this.y = y;
}
public void m1() { m2();}
public void m2() {
System.out.println("m2");
}
public void m3(){ m4(); }
public void m4() {
A tmp = new B(1,2,3);
System.out.println(tmp.y);
}
public void m5() {
System.out.println((new C().equals(c)));
}
public boolean equals(Object other) {
if(!(other instanceof A)) return false;
return (((A)other).x==x &
((A)other).y==y);
}
}
B类:
public class B extends A {
public int y;
public B(int x, int y1, int y2){
super(x,y1);
this.y = y2;
}
public void m2(){
m3();
}
public void m4() {
B temp = new B(1,2,3);
System.out.println(temp.y);
}
}
C类:
public class C extends A {
public int y;
public C(int x, int y){
super(x,y);
this.y = y;
}
public C(){
this(0,0);
}
}
我知道它很长,但我想让你理解问题的类型...... 我不是在寻找答案,而是试图帮助我理解这些概念和思考这个问题的方法。 我们正在努力解决的主要问题是,当您扩展一个类,然后在其中调用一个方法,在子类中调用一个不同的方法等等......跟踪所有这些是很困难的。 非常感谢, 巴拉克
【问题讨论】:
-
这些注释行是怎么回事?还请发布您对他们每个人的答案是什么?这样,您就可以比较您的答案是什么,以及如果它确实出错了,它是如何出错的。
标签: java class compilation extending