可以請你幫我如何創建一個不可繼承的類,並且應該在行爲中是靜態的(意味着我們不應該能夠創建它的實例)。我需要這個類來存儲常量值。謝謝。如何在java中創建一個不可繼承和靜態的類?
回答
可以使用final
關鍵字類不能被繼承。 但我會建議你使用Enums
。 Enums
不能被繼承,並且每個常量值只存在一個實例。你也可以用enums
做更多事情。
public enum DaysOfweek
{
SUNDAY,MONDAY.....
}
你可以閱讀更多關於枚舉這裏Enum Types
你可以有'enum Singleton {INSTANCE; ...},甚至是'enum Static {; ''。 –
我將前者用於無狀態單例,後者用於實用類。 –
爲什麼不使用具有幾個靜態變量和最終變量的接口?
public final class MyClass {
private MyClass() { }
}
的final
關鍵字使它不可繼承,並且使得構造(或多個)private
將幫助被實例化停止它。
使所有構造函數都是私有的,然後除了這個類本身以外,沒有人可以創建它的實例。 – ReyCharles
@ReyCharles:錯過了那部分。感謝您指出。 –
如果他正在設計類來存儲常量,他應該使用'enums'。 –
- 對於第一種情況,你可以使用
final
類,因爲它們不能被繼承.. - 關於第二個情況下,你可以使用
interface
,他們是很好的用來存儲Constants
。
但你不能有他們兩人在一起(作爲具有interface
不能爲implemented
沒有意義)..
所以,最好的是,你可以在一個混合兩者的性質類..你可以有一個final class
與public static final
變量,這是什麼使接口變量constant
,將服務的constants
目的..
public final class A {
public static final int YOUR_CONST = 5;
}
如果你不想讓這個類的實例,你可以在它private 0-arg constructor
..
public final class A {
public static final int YOUR_CONST = 5;
private A() {}
}
它是否必須是0-arg構造函數? – Jimmy
@vandey ..簡單地說 - 沒有..在這種情況下,因爲這個類不能被繼承,所以不會有任何問題,因爲不定義一個0-參數構造函數。在這裏我剛剛舉了一個例子0-arg構造函數.. –
public final class MyClass {
public static string MY_STRING;
public static int MY_INT;
private MyClass() {}
}
在Java中,一個類不能同時是'abstract'和'final' - http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls -8.1.1.2 –
@StephenC是的,謝謝。但我已經編輯了我的答案。 – manas
它聲明爲final,不會讓其他類來擴展它,並它的構造私人所以沒有人(除了自己的類)會能夠實例化它:
public final class MyClass {
private MyClass() {
// Private so noone else can instantiate this
}
}
final:做出一個類最終意味着這個類不能繼承更多。 static:如果所有方法都是靜態的,則不需要創建此類的實例。並且在行爲中應該是靜態的。
單例模式:如果你的所有方法都不是靜態的,並且你不想創建多個實例,那麼你可以使構造函數保持私有狀態,並在類中保留一個類對象的變量。如果它爲null,則創建一次,如果不爲null,則始終返回相同的實例。
由於
下面是包含一個恆定值的類的一個例子:
public final class Trial // it is the FINAL
{
private static final int CONSTANT_VALUE = 666;
private Trial() // it is PRIVATE instead of PUBLIC
{
}
public static int getConstantValue()
{
return CONSTANT_VALUE;
}
}
並且在下面的如何測試上面的類的例子:
public class Bully //extends Trial ////"extends" WILL NOT COMPILE
{
public static void main(String[] args)
{
//Trial trial = new Trial(); ////"new Trial()" WILL NOT COMPILE
// The only thing can be done is getting a constant value from "Trial"
int acquiredValue = Trial.getConstantValue();
System.out.println(acquiredValue);
}
}
希望這有助於:))
- 1. 靜態新建和繼承
- 2. 靜態類和繼承
- 3. C#繼承和靜態類
- 4. Java中的繼承和靜態成員
- 5. 繼承靜態類
- 6. 在Java中不可用的繼承靜態方法Nashorn
- 7. 靜態變量在基類和繼承
- 8. 如何在Javascript中繼承靜態和非靜態屬性?
- 9. java創建一個從不同類繼承的對象的ArrayList
- 10. 靜態方法的繼承和靜態變量繼承有何不同?
- 11. 基類和繼承的靜態屬性
- 12. 在Java中繼承靜態方法?
- 13. 靜態方法在Java中繼承
- 14. 創建一個繼承自UITextfield的類
- 15. 對於每個繼承類類型,繼承的靜態成員是不同的?
- 16. 繼承和存儲靜態類信息
- 17. 打字稿類:靜態和繼承
- 18. 如何在靜態類中使用多態或繼承?
- 19. 我可以創建一個從類和Delphi中的接口繼承的類嗎?
- 20. 類變量中的Python靜態繼承
- 21. Node.js中的可繼承靜態方法?
- 22. 我如何創建一個繼承Ellipse類的子類
- 23. 繼承靜態最終 - >不可見
- 24. 繼承和靜態屬性
- 25. 繼承和靜態變量
- 26. 用Javascript創建一個超類(繼承)
- 27. 從抽象類繼承的靜態類?
- 28. 如何用一個新的類替換動態繼承以在Python中繼承?
- 29. 繼承一個類,但通常使用靜態方法創建它?
- 30. 我該如何在C#中創建一個繼承的不可變屬性mutable?
「靜態行爲」不是一個有意義的描述。 「靜態」修飾符實際上允許在某些類(即內部類)上,它意味着不同的東西。你真正應該問的是如何讓一個類不可繼承和*不可實例化*。 –
[如何在Java中構建不可實例化和非可繼承類]的可能重複(http://stackoverflow.com/questions/8848107/how-to-construct-a-non-instantiable-and-non-inheritable-class -in-java) –