当前位置: 技术问答>java相关
scjp的一道考题
来源: 互联网 发布时间:2015-07-23
本文导语: What will happen when you attempt to compile and run this code? class Base{ abstract public void myfunc(); public void another(){ System.out.println("Another method"); } } public class Abs extends Base{ public static void main(String argv[]){ Abs a = new...
What will happen when you attempt to compile and run this code?
class Base{
abstract public void myfunc();
public void another(){
System.out.println("Another method");
}
}
public class Abs extends Base{
public static void main(String argv[]){
Abs a = new Abs();
a.amethod();
}
public void myfunc(){
System.out.println("My func");
}
public void amethod(){
myfunc();
}
}
1) The code will compile and run, printing out the words "My Func"
2) The compiler will complain that the Base class is not declared as abstract.
3) The code will compile but complain at run time that the Base class has non abstract methods
4) The compiler will complain that the method myfunc in the base class has no body, nobody at all to looove it
答案是2),考的是abstract的使用.
??但这里是两个类,在编译时要进行两次,我编译class Abs 时可以通过并得到答案1)的结果,class Base自然是编译都不能通过,我的问题是:
一,象这样带有超类的代码,在分别编译,运行的时候,对于子类来说只要能找到它extends的超类(有时也叫父类)即可,也就是只要超类的.java文件,而不管这个超类是否能正确的编译,运行.对吗?如果以上正确的话,本题就该选1),2)两个选项.
二,在这种What will happen when you attempt to compile and run this code?的问题中,如果代码里有N个类,我们是否应进行N次编译运行,而不是只编译带有main()的类,或只编译超类.
class Base{
abstract public void myfunc();
public void another(){
System.out.println("Another method");
}
}
public class Abs extends Base{
public static void main(String argv[]){
Abs a = new Abs();
a.amethod();
}
public void myfunc(){
System.out.println("My func");
}
public void amethod(){
myfunc();
}
}
1) The code will compile and run, printing out the words "My Func"
2) The compiler will complain that the Base class is not declared as abstract.
3) The code will compile but complain at run time that the Base class has non abstract methods
4) The compiler will complain that the method myfunc in the base class has no body, nobody at all to looove it
答案是2),考的是abstract的使用.
??但这里是两个类,在编译时要进行两次,我编译class Abs 时可以通过并得到答案1)的结果,class Base自然是编译都不能通过,我的问题是:
一,象这样带有超类的代码,在分别编译,运行的时候,对于子类来说只要能找到它extends的超类(有时也叫父类)即可,也就是只要超类的.java文件,而不管这个超类是否能正确的编译,运行.对吗?如果以上正确的话,本题就该选1),2)两个选项.
二,在这种What will happen when you attempt to compile and run this code?的问题中,如果代码里有N个类,我们是否应进行N次编译运行,而不是只编译带有main()的类,或只编译超类.
|
这道题考的是抽象类中抽象方法的应用,class Base应该被声明为抽象类。
不对,当一个类继承了一个超类时,要么超类中的属性被调用,要么超类中的放法或函数被调用,也就是说,子类在继承超类时必与之发生关系,并遵守一定的规则,虽然子类继承了超类,并且分别编译都能通过,但如过违反某种规则,也会编译出错的,该题考的时,抽象方法在抽象类中被声明,在其子类中被调用,所以编译时会出现答案二的结果。我的感觉时,只编译一次,但是产生N个CLASS文件,不仅仅只编译超类。
不对,当一个类继承了一个超类时,要么超类中的属性被调用,要么超类中的放法或函数被调用,也就是说,子类在继承超类时必与之发生关系,并遵守一定的规则,虽然子类继承了超类,并且分别编译都能通过,但如过违反某种规则,也会编译出错的,该题考的时,抽象方法在抽象类中被声明,在其子类中被调用,所以编译时会出现答案二的结果。我的感觉时,只编译一次,但是产生N个CLASS文件,不仅仅只编译超类。
|
没有指明在两个文件中!
而且父类编译后子类才能编译,否则会提示not found ......,这也是一道考题哦!
而且父类编译后子类才能编译,否则会提示not found ......,这也是一道考题哦!