几天前,我的一个朋友在电话面试中被问到了这个问题。我一无所知。有人能提供解决方案吗?(他的面试已经结束了,只是出于好奇)10x。
volatile
。 - Tom Hawtin - tacklinepublic class Base
{
private Base()
{
}
}
public class Derived : Base
{
//Cannot access private constructor here error
}
public class Immutable {
private int val;
public Immutable(int v)
{
this.val = v;
}
public int getVal() { return this.val; }
}
我不太明白他们所说的final类到底是什么意思。如果他们指的是一个不能被继承的类,那显然除了将这个类标记为final(或者sealed,或者其他语言关键字),就无法实现。
但如果他们所说的final是指不可变的,也就是派生类无法修改该类中字段的值,那么基类中应该将所有字段和访问器方法都设为私有。
你可以在不使用final关键字的情况下使你的类成为不可变类,具体步骤如下:
我在这里提供了一个在Java中的不可变类。
class Immutable {
private int i;
private Immutable(int i){
this.i = i;
}
public static Immutable createInstance(int i){
return new Immutable(i);
}
public int getI(){return i;}
}
class Main {
public static void main(string args[]){
Immutable obj = Immutable.createInstance(5);
}
}
静态类无法被继承
public class Test { static class A {} static class B extends A{} public static void main(String [] args) throws Exception { B b = new B(); System.err.println(""+b); } }
将其粘贴到 Test.java
中,编译并运行。 - khachikfinal
关键字的语言中,如何表达“static classes”?必须要使用可以被扩展的静态嵌套类。 - Tom Hawtin - tackline
final
类,我会使用该死的final
关键字。它存在是有原因的。”我知道他们可能想了解面试者的创造力,但有比询问如何避免充分利用语言更好的方法。 - Rob Hruskafinal
的相关性的了解,而后一部分则展示了对代码的"好"和"坏"的意识,而不仅仅是"功能上正确"的代码。 - Andrzej Doyle