方法一:
public final class FinalDemo {
}java
public class FinalDemo2 extends FinalDemo {
} 對象
在編譯第一個類後,若是你接着編譯第二個類,那麼JDK編譯器報錯,你會獲得下列錯誤信息:繼承
FinalDemo2.java:1: cannot inherit from final FinalDemo
public class FinalDemo2 extends FinalDemo{}ci
方法二:get
聲明構造方法爲私有(private)的, 並且也聲明一個靜態方法(static method)來返回一個類對象。 編譯器
public class jiekou {it
private jiekou(){
System.out.println("Private Default Constructor");
}
public static jiekou getInstance(){
return new jiekou();
}
}編譯
class list extends jiekou{
}class
list下面會有紅線,提示權限
Implicit super constructor jiekou () is not visible for default constructor. Must define an explicit constructor
JAVA語言要求在一個類中至少要提供一個構造方法。 若是你沒有提供任何 構造 方法, JDK將會在你聲明的類中插入一個默認的 構造 方法。 換句話說,默認的是一個不帶參數,空 構造 體,和一個公共(public)訪問權限的 構造 方法。 可是,若是你本身定義了一個 構造 方法, 那麼JDK編譯器就不會插入默認的 構造 方法。咱們剛纔在 jiekou 類中聲明瞭一個默認的 jiekou 方法,可是咱們將默認的public訪問權限 改成了private權限,這些都是符合JDK編譯器語法檢查的規則的。
如今咱們來看看第二個 類list 。JAVA語言也要求你必須在 構造 方法裏的第一行來調用(call)超類(super class)的 構造 方法。 這個是啓動繼承特徵所必須的。 在JAVA中,咱們經過調用super()這個方法來完成這個任務,它將會映射到一個超類的 構造 方法中。 若是你沒有給超類提供一個默認的構造方法,那麼JDK編譯器將會插入一個默認的超類 構造 方法用來調用。
咱們剛纔在第一個類中將構造器聲明爲private的權限。如今,當咱們在其餘類中繼承這個類的時候,編譯器將會嘗試調用一個默認的超類 構造 方法。由於超 類範圍內的 構造 方法是聲明爲private權限的, 編譯器將報錯,說不能調用超類 構造 方法。所以,咱們經過非官方辦法阻止了一個類被其餘類所繼承,只要 private 改成public後就能夠了。