- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
final和abstract修饰符
1 final修饰符
使用final修饰符可以修饰类的成员变量、类的成员方法和类。前面我们知道,用final修饰成员变量或局部变量,则该变量为常值变量(常量),一旦赋值便不能改变,一般与static组合定义类常量。
也可以用final修饰成员方法。如果一个方法使用final修饰,则该方法不能在子类中被覆盖。例如下面的代码会发生编译错误:
class A{
final void method(){}
}
class B extends A{
void method(){}
}
final关键字还可以修饰一个类。如果一个类使用final修饰,则该类就为最终类(final class),最终类是不能被继承的类。
定义final类的格式为:
final class ClassName{
//…
}
下面代码会发生编译错误:
final class A{
//…
}
class B extends A{
//…
}
有时为了安全的考虑,防止类被继承,可以在类的定义时使用final修饰符。在Java的类库中就有一些类声明为final类,如Math类和String类都是final类,它们都不能被继承。 声明为final的类隐含声明了其中的方法都为final方法。
2 abstract修饰符
在继承的层次结构中,随着一个个新子类的出现,类变得越来越专门、越具体。如果从一个子类上溯到父类,类就变得更一般、更通用。类的设计应该保证父类和子类能够共享特征。有时将一个类的设计得非常抽象,以至于它没有具体的实例。
前面我们定义了圆的类,假设我们还要设计一个矩形(Rectangle)类和三角形(Triangle)类,这些类也需要定义求周长和面积的方法。
它们具有共同的特征和行为。这时我们就可以设计一个更一般的类,比如几何形状(GeometricShape)类,来模拟圆、矩形、三角形等。在该类中定义那些求周长和面积的方法,然后在定义具体形状的类时继承该类并覆盖其中的方法。
由于几何形状不能有一个具体的对象,因此方法的实现需要依赖于具体的形状,这些方法就不能实现,因此要定义为抽象的方法(abstract method)。抽象方法是只有方法的声明,没有方法的实现,定义抽象方法需要在方法前加上abstract修饰符。
包含抽象方法的类应该定义为抽象类(abstract class),定义抽象类需要的类前加上abstract修饰符。
下面定义的GeometricShape类即为抽象类,其中定义了两个抽象方法。
程序GeometricShape.java
public abstract class GeometricShape{
public int color;
public String name;
public GeometricShape(){
color = 0;
name = shape;
}
public GeometricShape(int color,String name){
this.color = color;
this.name = name;
}
public void setColor(int color){
this.color = color;
}
public int getColor(){
return color;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public abstract double circum();
public abstract double area();
}
_____________________________________________________________________________▃
抽象类不能被实例化,即不能生成抽象类的对象,如下列语句将会产生编译错误:
GeometricShape gs=new GeometricShape();
可以创建抽象类的子类,抽象类的子类还可以是抽象类。只有非抽象的子类才能使用new创建该类的对象。在抽象类中可以定义构造方法,这些构造方法可以在子类的构造方法中调用。在抽象类中可以定义非抽象的方法。
抽象方法的作用是为所有子类提供一个统一的接口。对抽象方法只需声明,不需实现,即在声明后用一个分号(;)结束,而不需要用大括号,例如上面类定义的最后两行就声明了两个抽象方法。
抽象类中可以没有抽象方法,但仍然需要被
文档评论(0)