方法一:
public final class FinalDemo {
}
public class FinalDemo2 extends FinalDemo {
}
在编译第一个类后,如果你接着编译第二个类,那么JDK编译器报错,你会得到下列错误信息:
FinalDemo2.java:1: cannot inherit from final FinalDemo
public class FinalDemo2 extends FinalDemo{}
方法二:
声明构造方法为私有(private)的, 而且也声明一个静态方法(static method)来返回一个类对象。
public class jiekou {
private jiekou(){
System.out.println("Private Default Constructor");
}
public static jiekou getInstance(){
return new jiekou();
}
}
class list extends jiekou{
}
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后就可以了。