当前位置: 移动技术网 > IT编程>开发语言>Java > JAVA中阻止类的继承(官方和非官方)

JAVA中阻止类的继承(官方和非官方)

2019年07月22日  | 移动技术网IT编程  | 我要评论
官方办法 java语言提供的一个关键字“final”可以用来履行该任务。看看下面的源代码范例: 复制代码 代码如下://finaldemo.java public

官方办法

java语言提供的一个关键字“final”可以用来履行该任务。看看下面的源代码范例:

复制代码 代码如下:

//finaldemo.java
public final class finaldemo {
}

    下面让我们来制作另一个类,它将会继承上面声明的类。java语言提供的“extends”关键字将能够使得一个类继承于一个现有的类。

复制代码 代码如下:

//finaldemo2.java
public class finaldemo2 extends finaldemo {
}  

在编译第一个类后,如果你接着编译第二个类,那么jdk编译器报错,你会得到下列错误信息:

finaldemo2.java:1: cannot inherit from final finaldemo
public class finaldemo2 extends finaldemo{}
                                ^
1 error


现在,你已经通过官方办法来成功阻止了第一个类被另一个类所继承。

非官方办法

    但是,阻止类被其他类所继承的办法也不是唯一的。考虑下面的代码,我声明了构造方法为私有(private)的, 而且也声明了一个静态方法(static method)来返回一个类对象。

复制代码 代码如下:

public class privatetest{
        private privatetest(){
                system.out.println("private default constructor");
        }
        public static privatetest getinstance(){
                return new privatetest();
        }
}

    上面被修改的代码被称为是"singleton模式," 一个getinstance方法总是只返回这个类的一个实例。 但是为什么这段代码阻止了类被继承呢?考虑下面的代码,声明的类应该能继承上面的类。

public class privatetest2 extends privatetest{


}


在编译第一个类后,如果你接着编译第二个类,那么jdk编译器报错,你会得到下列错误信息:

privatetest2.java:1: privatetest() has private access in privatetest
public class privatetest2 extends privatetest{
       ^
1 error


    第二个类不能继承第一个类。 但是提示错误的意思是什么呢? java语言要求在一个类中至少要提供一个构件方法。 如果你没有提供任何构件方法, jdk将会在你声明的类中插入一个默认的构件方法。 换句话说,默认的是一个不带参数,空构件体,和一个公共(public)访问权限的构件方法。 但是,如果你自己定义了一个构件方法, 那么jdk编译器就不会插入这么默认的构件方法。我们刚才在privatetest类中声明了一个默认的构件方法,但是我们将默认的public访问权限改为了private权限,这些都是符合jdk编译器语法检查的规则的。 

    现在我们来看看第二个部门。java语言也要求你必须在构件方法里的第一行来调用(call)超类(super class)的构件方法。 这个是启动继承特征所必须的。 在java中,我们通过调用super()这个方法来完成这个任务,它将会映射到一个超类的构件方法中。 如果你没有给超类提供一个默认的构造方法,那么jdk编译器将会插入一个默认的超类构件方法用来调用。

    我们刚才在第一个类中将构造器声明为private的权限。现在,当我们在其他类中继承这个类的时候,编译器将会尝试调用一个默认的超类构件方法。因为超类范围内的构件方法是声明为private权限的, 编译器将报错,说不能调用超类构件方法。因此,我们通过非官方办法阻止了一个类被其他类所继承。

usman saleem
mohammad ali jinnah university
e-mail: usman_saleem@yahoo.com 

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网