Java中的String類可否被繼承?爲何?

不能被繼承,由於String類有final修飾符,而final修飾的類是不能被繼承的。java

Java對String類的定義:

public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
    // 省略... 
}

 

final修飾符的用法:

1.修飾類dom

  當用final修飾一個類時,代表這個類不能被繼承。final類中的成員變量能夠根據須要設爲final,可是要注意final類中的全部成員方法都會被隱式地指定爲final方法。性能

 

2.修飾方法優化

  使用final修飾方法的緣由有兩個。第一個緣由是把方法鎖定,以防任何繼承類修改它的含義;第二個緣由是效率。在早期的Java實現版本中,會將final方法轉爲內嵌調用。可是若是方法過於龐大,可能看不到內嵌調用帶來的任何性能提高。在最近的Java版本中,不須要使用final方法進行這些優化了。spa

  所以,只有在想明確禁止該方法在子類中被覆蓋的狀況下才將方法設置爲final。code

  注:一個類中的private方法會隱式地被指定爲final方法。對象

 

3.修飾變量blog

  對於被final修飾的變量,若是是基本數據類型的變量,則其數值一旦在初始化以後便不能更改;若是是引用類型的變量,則在對其初始化以後便不能再讓其指向另外一個對象。雖然不能再指向其餘對象,可是它指向的對象的內容是可變的。繼承

 

final和static的區別:

不少時候會容易把static和final關鍵字混淆,static做用於成員變量用來表示只保存一份副本,而final的做用是用來保證變量不可變。看下面這個例子:io

 1 public class Demo1 {
 2     public static void main(String[] args)  {
 3         MyClass myClass1 = new MyClass();
 4         MyClass myClass2 = new MyClass();
 5         System.out.println(myClass1.i);
 6         System.out.println(myClass2.i);
 7         System.out.println(myClass1.j);
 8         System.out.println(myClass2.j);
 9 
10     }
11 }
12 
13 class MyClass {
14     public final double i = Math.random();
15     public static double j = Math.random();
16 }

 運行結果:

0.3222977275463088
0.2565532218939688
0.36856868882926397
0.36856868882926397

每次打印的兩個j值都是同樣的,而i的值倒是不一樣的。從這裏就能夠知道final和static變量的區別了。

相關文章
相關標籤/搜索