加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

抽象类(abstract)和最终类(final)

(2014-08-23 10:13:17)
分类: java
用关键字abstract修饰的类就是抽象类,它是所有子类的公共属性(数据)和行为方法的集合,抽象类没有具体对象,是处于组织概念的层次关系而存在的类。下面举例说明为什么要抽象类。

为了描述各种具体的鸟类,如鸽子、麻雀、孔雀、凤凰等,从概念和组织层次关系来看,可以从这些具体的鸟类中抽象出一个并没有具体实例的鸟类。所定义的鸟类具体所有具体鸟类的共同特性。然后通过继承鸟类可以派生鸽子、麻雀、孔雀、凤凰等子类,这样子类中只需描述各种鸟类其自身特点,而不必描述各种具体鸟类的共同特点,这种分层次的组织方式使各种鸟类概念清晰、层析分明、且简单有效并易于扩充。这里的鸟仅仅作为一个抽象概念而存在,代表了所有鸟的共同属性,
任何一个具体的鸟都是由鸟的共性加鸟的特性而形成的某个子类的对象。

用关键字abstract修饰的方法就是抽象方法(没有抽象变量),抽象方法只有方法头,后面跟一个分号(;),没有方法体,抽象方法的方法体可在其子类中根据子类的具体情况来实现,抽象方法只存在抽象类或接口中。

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif//Figure.java
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
public abstract class Figure
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif
...
{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
protected double
x;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif Figure()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif
...{}

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif Figure(
double x1 )
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif
...
{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif x
=
x1 ;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
abstract public double area();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
public
String toString();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif
...
{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
return "x=" +
x;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif }

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
//circle.java
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
public class Circle extends Figure //圆类
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif
...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
public Circle( double
x1 )
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif
...
{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
super
(x1);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
public double area() //具体实现父类的抽象方法,求圆面积
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif
...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
return 3.1415926 * x *
x ;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
public String toString()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif
...
{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
return "圆: " + super.toString()+ " aea" +
area();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif }

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
//Rectangel.java
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
public class Rectangle extends Figure
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif
...
{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
protected double
y;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
public
Rectange()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif
...{}

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
public Rectange( doule a,double b )
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif
...
{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
super
(a);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif y
=
b;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
public double area() //具体实现父类的抽象方法,求长方形面积
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif
...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
return x *
y ;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
public String toString()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif
...
{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
return "长方形: " + super.toString() + " y=" + y + " area" +
area();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif }

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
//TestFigure.java
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
public class TestFigure
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif
...
{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
public static void
main(String[] args)
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif
...
{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif Rectangle R1
= new Rectangle(10.0 , 20.0
);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif Circle C1
= new Circle(10.0
);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif System.out.println(R1.toString());
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif System.out.println(C1.toString());
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif }

声明为final的类不能是父类,即final不再派生子类,final可以用来修饰变量和方法。
final类是处在类的最底层的类,如果没必要再派生子类,通常用final关键字来修饰,表明它是最终类,被final修饰的类通常是有固定作用,完成一定标准功能的类,例如java库中的数学类MATH等。
abstract和final不能同时使用,关键字abstract不能修饰实例变量,也不能与private、static、final等同时修饰一个成员方法,并且abstract类必须在abstract类中。关键字static修饰的方法只能修饰static成员变量,同时static修饰的成员变量和方法不能this引用。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有