| 发表于:2007-10-08 23:08:47 楼主 |
abstract class name { private string name; public abstract void getname(string name) {} } 这有何错误? 答案: 错。abstract method必须以分号结尾,且不带花括号。 正确应该是:public abstract void getname(string name); 还有,interface中的方法也是一样哦; eg: public interface single{ public void getname(); } 002 package jdbc; /** * @author exceljava * */ public class test { private string name; public test() { } public string getmessage(){ final string msg; private string temp; return temp; } } 有错吗? 答案: 错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。但是final可以用来修饰局部变量,所以知道错在那里了吧 003 abstract class something { private abstract string dosomething (); } 答案: 错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstract method封锁起来呢? (同理,abstract method前不能加final)。 004 class something { int i; public void dosomething() { system.out.println("i = " + i); } } 有什么错呢? 看不出来啊。 答案: 正确。输出的是"i = 0"。int i属於instant variable (实例变量,或叫成员变量)。instant variable有default value。int的default value是0。 005 class something { final int i; public void dosomething() { system.out.println("i = " + i); } } 和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗? 答案: 错。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为"final int i = 0;"。 006 此处,something类的文件名叫otherthing.java class something { private static void main(string[] something_to_do) { system.out.println("do something ..."); } } 答案: 正确。从来没有人说过java的class名字必须和其文件名相同。但public class的名字必须和文件名相同。 007 interface a{ int x = 0; } class b{ int x =1; } class c extends b implements a { public void px(){ system.out.println(x); } public static void main(string[] args) { new c().px(); } } 答案:错误。在编译时会发生错误(错误描述不同的jvm有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import java.util和java.sql两个包时直接声明date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为 public static final.所以可以通过a.x来明确。 008 interface playable { void play(); } interface bounceable { void play(); } interface rollable extends playable, bounceable { ball ball = new ball("pingpang"); } class ball implements rollable { private string name; public string getname() { return name; } public ball(string name) { this.name = name; } public void play() { ball = new ball("football"); system.out.println(ball.getname()); } } 这个错误不容易发现。 答案: 错。"interface rollable extends playable, bounceable"没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface rollable里的"ball ball = new ball("pingpang");"。任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final。也就是说"ball ball = new ball("pingpang");"实际上是"public static final ball ball = new ball("pingpang");"。在ball类的play()方法中,"ball = new ball("football");"改变了ball的reference,而这里的ball来自rollable interface,rollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在"ball = new ball("football");"这里显示有错。 |
|
|
|
|