2014-07-30 20:02:00|?次阅读|上传:wustguangh【已有?条评论】发表评论
答案 : 错。 "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");" 这里显示有错。
28 、设计 4 个线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1 。写出程序。
以下程序使用内部类实现线程,对 j 增减的时候没有考虑顺序问题。
public class ThreadTest1{ private int j; public static void main(String args[]){ ThreadTest1 tt=new ThreadTest1(); Inc inc=tt.new Inc(); Dec dec=tt.new Dec(); for(int i=0;i<2;i++){ Thread t=new Thread(inc); t.start(); t=new Thread(dec); t.start(); } } private synchronized void inc(){ j++; System.out.println(Thread.currentThread().getName()+"-inc:"+j); } private synchronized void dec(){ j--; System.out.println(Thread.currentThread().getName()+"-dec:"+j); } class Inc implements Runnable{ public void run(){ for(int i=0;i<100;i++){ inc(); } } } class Dec implements Runnable{ public void run(){ for(int i=0;i<100;i++){ dec(); } } } }