有时候,你不希望别人坐享其成,通过继承你写的类得到他自己所需要的类,怎么办呢?这个时候你就可以在你的class之前加上final这个修饰府,例如public final class test{……},加上了这个修饰符之后,别人在继承这个类的话就会编译出错,提示他这个类不能构建子类。从这我们可以看出,final修饰符和abstract修饰符是不能同时使用的,因为abstract类可以说是专门用来继承的,而final类则不能用于继承。那么如果是在方法的前面加上final修饰符有什么作用呢?比如说A类中有个声明为final的方法a(){….},那么B继承A的时候,B就不能覆盖方法a(){….},否则编译出错,提示Cannot
override the final method from A。此外,如果一个类声明为final类的话,它里面所有的方法都自动成为final类型的。自然的,你肯定会问,如果一个域申明为final的时候有什么作用?一个属性声明为final之后,你不能在对它重新进行赋值,否则编译报错,The final field ×× cannot be assigned。另外,请注意,类声明为final的时候,仅仅它的方法自动变为final,而属性则不会。
2.抽象类
抽象类的用处是十分大的,特别是对于OOP而言,关于抽象类,总结几点:
a. 抽象类不能实例化,即不能对其用new运算符;
b. 类中如果有一个或多个abstract方法,则该类必须声明为abstract;
c. 抽象类中的方法不一定都是abstract方法,它还可以包含一个或者多个具体的方法;
d. 即使一个类中不含抽象方法,它也可以声明为抽象类;
abstract修饰符
Abstract修饰符表示所修饰的类没有完全实现,还不能实例化。如果在类的方法声明中使用abstract修饰符,表明该方法是一个抽象方法,它需要在子类实现。如果一个类包含抽象函数,则这个类也是抽象类,必须使用abstract修饰符,并且不能实例化。
在下面的情况下,类必须是抽象类:
1.类中包含一个明确声明的抽象方法;
2.类的任何一个父类包含一个没有实现的抽象方法;
3.类的直接父接口声明或者继承了一个抽象方法,并且该类没有声明或者实现该抽象方法。
如下例所示:
abstract class a1
{
public int v1;
abstract void test();
}
abstract class a2 extends a1
{
public int v2;
}
class Sample extends v2
{
void test() { }
}
因为包含一个抽象方法test,类v1必须被声明为抽象类。它的子类v2继承了抽象方法test,但没有实现它,所以它也必须声明为抽象类。然而,v2的子类Sample因为实现了test,所以它不必声明为抽象的。
注意:
如果试图创建一个抽象类的实例就会产生编译错误;
如果一个类是非抽象类却包含一个抽象方法,就会产生编译错误;
构造函数和静态函数以及Final修饰的函数不能使用abstract修饰符;
接口缺省为abstract。
Static修饰符
通常,在创建类的实例时,每个实例都会创建自己实例变量。但是在变量的声明中可以使用Static修饰符,它表明该成员变量属于类本身,独立于类产生的任何对象。这种成员变量称为静态变量(静态属性)。方法的声明中也可以使用static修饰符,表明该方法从属于类本身。
在静态成员函数中只能直接调用其它的静态成员函数或引用静态属性,否则会造成编译错误。静态成员函数中也不能使用this或者super,因为它们是和类的对象相关联的。
静态属性和静态方法不需要创建实例就可以使用。
典型的例子是java.lang包中的System类中的方法和变量。我们常用
System.out.println(“message”);
输出信息,并没有创建System的实例,是因为println方法声明为System类的静态方法,它不需创建实例就可以使用。
下面的例子会帮助你更深刻的理解Static修饰符。注意各个代码块的加载次序。
Class Sample
{
static int s1=3;
static int s2;
static void display()
{
System.out.println("s1="+s1);
System.out.println("s2="+s2);
}
static
{
System.out.println("static block");
S2=s1+1;
}
public static void
main(Stringargs[])
{
Sample.display();
}
}
一旦这个类被调用,所有的静态变量都被初始化,s1被赋为3,然后运行static块,这将打印出一段消息,并且把s2赋为s1+1,即4。然后解释器调用main成员函数,它调用了成员函数display,该函数输出s1和s2的信息。运行结果如下:
C:\>java Sample
static block
s1=3
s2=4
通过上面的例子还可以看出,一个静态成员函数可以通过它所属的类名来调用。
final修饰符
如果一个类是完全实现的,并且不再需要继承子类,则它可以声明为Final类。如果final类的名字出现在另一个类声明的extends字句的后面就会产生编译错误。这表明final类不能又任何的子类。类不能同时被声明为abstract和final,因为abstract类中的abstract方法永远没有机会被实现。
在缺省情况下,所有的成员函数和实例变量都可以被覆盖。如果你希望你的变量或成员函数不再被子类覆盖,可以把它们声明为final。
例如:
final int MAX_VALUE = 100;
表示,MAX_VALUE的值为100,并且不能再更改。final变量用大写标识符是一个一般的约定。
分享到:
相关推荐
Java有四种访问权限,其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符,下面通过本文给大家简单介绍下java修饰符访问权限相关知识,感兴趣的朋友一起学习吧
在Java编程语言中,`final`关键字扮演着一个至关重要的角色,它被广泛用于定义不可变对象、常量以及固定行为。本篇文章将深入探讨`final`关键字在Java中的使用和重要性,帮助开发者更好地理解和应用这一关键特性。 ...
本篇分析将详细探讨static修饰符的使用方法、特点以及相关的注意事项。 首先,静态变量常用于函数内部,目的是保存函数调用之间的状态信息。普通的局部变量在函数执行完毕后就会被销毁,每次调用函数时,该变量都会...
Java中的`final`关键字是一个非常重要的概念,它用于声明不可变的类、方法或变量,以确保代码的稳定性和安全性。下面将详细讲解`final`关键字的用途和使用细节。 一、`final`关键字的基本用法 1. 修饰类 当一个类...
访问修饰符是面向对象编程中的一个重要概念,它们用于控制类成员的访问权限。PHP提供了三种访问修饰符:public(公有的)、protected(受保护的)、和private(私有的)。下面将详细介绍这三种访问修饰符的作用和...
Java声音技术浅析 在Java世界里,多媒体技术的集成一直是开发者关注的焦点,其中声音技术尤为关键。本文将深入探讨Java对声音处理的支持,包括Applet中的声音播放、Java应用程序中的声音处理以及JavaX中Sound包的...
本文将对C语言中的const修饰符进行浅析,讨论它在不同场合、不同位置的使用,以及它对程序的影响。 首先,const修饰符可以用来限定变量的值,使其不能被修改。例如,在定义整型变量时,可以使用const修饰符来限定其...
首先,`final`关键字在Java中具有三个主要用途:修饰类、方法和变量。 1. **final修饰类**: 当一个类被声明为`final`时,这意味着它不能被其他类继承。这样做可以保护类的设计不被改变,通常用于那些设计完成并且...
Java技术浅析 Java是一种广泛应用于企业级项目开发的编程语言,它具有强大的功能和灵活的特性,使其成为开发大型项目的首选语言。Java技术浅析主要介绍了Java语言的技术关键词、编程技术框架、原理等知识点。 一、...
Java语言中This关键字应用浅析,看完后帮助于JAVA中类的操作。
【Java基础教程之final关键字浅析】 在Java编程语言中,`final`关键字是一个非常重要的关键字,它有多个用途,可以用于修饰类、方法和变量,确保它们在程序执行过程中保持不可变性或不可重写性。理解并熟练运用`...
浅析固定U盘盘符的原理 在Windows操作系统中,U盘和其他可移动存储设备的盘符分配是由系统自动进行的,但用户有时希望固定U盘的盘符,以避免每次插入时盘符变化带来的不便。本文将深入探讨这一主题,分析固定U盘盘...
"Java组件的浅析" JavaBean是一种软件组件,它是一个Java类,定义了一系列get和set方法。JavaBean是为了简化jsp页面与后台数据的交互过程而产生的。使用JavaBean可以将数据封装在一个Bean对象中,然后将Bean对象...
Java Server Pages (JSP) 技术。JSP 提供了一种更简便的方式来创建动态网页,它将内容的生成和显示分离开,使得开发者可以专注于业务逻辑而不必关心具体的页面展示。JSP 页面由静态HTML和嵌入其中的Java代码组成,...
AWT(Abstract Window Toolkit)是Java语言中的一个GUI组件库。它提供了基本的GUI组件,如按钮、标签、文本框等。AWT的主要特点是跨平台性,即可以在不同的操作系统上运行,而不需要重新编译代码。 Swing: Swing是...
在具体编程中,抽象类可以包含若干个抽象方法,并在类头前加上abstract修饰符来定义。 2. 接口 Java中的接口是一种抽象类,是一系列方法的声明以及特征的集合。它只包含常量和方法的定义,而没有变量和方法的实现...