在www.izuren.com上面看到的java面试题, 查找代码里的错误.1.
abstract class Name {
private String name;
public abstract boolean isStupidName(String name) {}
}
大侠们,这有何错误?
2.
public class Something {
void doSomething () {
private String s = “”;
int l = s.length();
}
}有错吗?
3.
abstract class Something {
private abstract String doSomething ();
}
这好像没什么错吧?
4.
public class Something {
public int addOne(final int x) {
return ++x;
}
}
5.
public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something().addOne(o);
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i;
}

解决方案 »

  1.   

    只有5是正确的.
    1.abstract 方法不能有实现
    2.方法中不能使用private 
    3.private 和abstract矛盾,谁来实现该方法?
    4.final的x不能改变学习方法:自己编译一遍,看有什么编译错误,就理解了.
      

  2.   

    1. public abstract boolean isStupidName(String name) {} 应该写成 public abstract boolean isStupidName(String name);
      

  3.   


    同意1楼5正确。
    2. doSomething () 方法中不能使用private 
    3. 不能同时使用private abstract 
      

  4.   

    1.抽象类中至少有一个方法未被实现,只有定义。题中是空实现。
    2.public 方法是给其他类访问的,private属性只能被同一个类访问,肯定要出错。
    3.还是访问权限的问题,抽象类是为了让其他类实现的,那么实现是实现它里面的方法,方法的访问权限是private 只能被同一个类中访问。其他类实现不了,所以要错啊。
    4.final变量初始化后就是常量了。常量怎么可以++操作。
      

  5.   

    4可能是为了迷惑5的吧4
    public int addOne(final int x) {
    return ++x;
    }
    改变的事整型x本身 与final矛盾5.
    public void addOne(final Other o) {
    o.i++;
    }
    改变的是对象o的属性 而对象o没有改变
      

  6.   

    1.错
    abstract class Name {
    private String name;
    //这个很明显是错的,既然声明了是abstract,就不能同时又实现该方法了
    //改为public abstract boolean isStupidName(String name);
    public abstract boolean isStupidName(String name){}
    }
    2.错public class Something {
    void doSomething() {
    //局部变量不能用private等访问修饰符修饰
    //改为String s = "";
    private String s = "";
    int l = s.length();
    }
    }
    3.错
    abstract class Something {
     //你用private修饰的话,继承这个类的子类没有访问父类私有成员的权限,实现不了这个方法
    private abstract String doSomething();
     }
    4.错
    public class Something {
    //x被final修饰,也不是不能改变它的值,而++x改变了它的值,所以是错
    public int addOne(final int x) {
    return ++x;
    }
    }5.对public class Something {
    public static void main(String[] args) {
    Other o = new Other();
    new Something().addOne(o);
    }
    //final修饰的变量是引用类型时,不变的是引用地址,而引用地址里的内容是可以改变的,所以o.i++没错
    public void addOne(final Other o) {
    o.i++;
    }
    }class Other {
    public int i;
    }
      

  7.   

    1、抽象类中的方法不能有方法体
    2、局部变量不能用private等访问修饰符修饰 
    3、抽象类的修饰符默认是public不能是private
    4、final修饰符修饰属性时该属性是常量
    5、final修饰的变量是引用类型时,不变的是引用地址,而引用地址里的内容是可以改变的,所以o.i++没错
      

  8.   

    TKS
      
    ---------------------------
      省事往往是费事苗子
    ---------------------------
      

  9.   

    个人认为:
    1,已经有了实现(虽然是空实现),所以不能申明为abstract方法
    2,方法中不能定义private变量
    3,抽象类中的抽象方法是需要被继承,然后被重写的,所以不能申明为private
    4,X是final(常量),所以不能更改.
    5,正确
      

  10.   

    1. 
    abstract class Name { 
    private String name; 
    public abstract boolean isStupidName(String name) {} //不能有方法体把{}改成;

    2.
    public class Something { 
    void doSomething () { 
    private String s = “”; //private是属性修饰符这里这个String只是个变量
    int l = s.length(); 


    3
    abstract class Something { 
    private abstract String doSomething (); //定义成private别人怎么重写

    4. 
    public class Something { 
    public int addOne(final int x) { //final修饰的参数一旦x被传进来就不能在方法里改其值了
    return ++x; 


    5. 貌似没什么错误
    public class Something { 
    public static void main(String[] args) { 
    Other o = new Other(); 
    new Something().addOne(o); 

    public void addOne(final Other o) { 
    o.i++; 


    class Other { 
    public int i; 
    }
      

  11.   

    方法中不能使用private 
    谢谢楼主
      

  12.   

    [Quote=引用 18 楼 beanj 的回复:]
    9楼和14楼讲的很详细。
    [/Quote
    学习了