专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » 抽象类和接口的区别:抽象类的学习 »正文

抽象类和接口的区别:抽象类的学习

来源: 发布时间:星期一, 2009年2月23日 浏览:0次 评论:0
在java中定义类时可以仅声明思路方法名称而不操作其中逻辑这样思路方法称的为抽象思路方法如果个思路方法中包括了抽象思路方法则该类称的为抽象类抽象类是拥有未实现思路方法所以它不能被用来生成对象它只能被继承扩展并于继承后实现未完成抽象思路方法在java中声明抽象思路方法和抽象类要用abstract关键词以下举个实际例子先假设设计了两个类——ConcreteCircle和HollowCricle
2Rc4`&^)GsO%O-a7\      public ConcreteCricle{
|w _}YV$le I              private double radius;
1c u DF8GL?              public void Redius( radius){this.radius=radius;}
9nWi*y$E*P,k              public double getRadius{ radius;}
+D/G4| W'@$V,]g              public void render{
$\6Iqg.q)I \ J                       .out.prf("画个半径%f实心圆\n",getRadius);JAVA中文站社区门户1\9FS6Kb a/EE[
              }JAVA中文站社区门户'Ut9eSg:ou3Jh
     }
;n0a*a8R o ]L#U     public HollowCricle{JAVA中文站社区门户t S#C"y0sas)y5We4K.n
              private double radius;
nfR_5VK              public void Redius( radius){this.radius=radius;}JAVA中文站社区门户 TGE @!Y5{a t
              public double getRadius{ radius;}
a2ece ]F {5C.Y"G'@              public void render{
~'E~^.Dio                       .out.prf("画个半径%f空心圆\n",getRadius);
A+@p$]!iL2c               }
]b s![P.|u5@      }
]:\7p!x0L#h"bo!N显然这两个类除了render思路方法实现内容区别的外其他定义是而且这两个类所定义都是圆种类型可以定义个抽象AbstactCircle类 将ConcerteCircle和HollowCircle中相同行为和定义提取(Pull up)至抽象类中如下例所示:JAVA中文站社区门户5|S\)Y6X!K5{
public abstract AbstactCircle{JAVA中文站社区门户 lCE/p)F4Y I
              protected double radius;JAVA中文站社区门户XB`o9wg9}
              public void Redius( radius){this.radius=radius;}
Rs r f:I4]Ih.\              public double getRadius{ radius;}JAVA中文站社区门户8I:uL)i2[s
              public abstract void render;
Y+In#frg}
@]H"h@注意到在类声明上使用了abstract关键词所以AbstactCircle是个抽象类它只能被继承而render思路方法上也使用了abstract关键词表示它是个抽象思路方法目前还不用实现这个思路方法继承了AbstactCircle类必须实现render思路方法接着可以让ConcreteCircle类继承AbstactCircle思路方法并是想render思路方法如范例所示:JAVA中文站社区门户PX2eJ4FJ
ConcreteCircle.javaJAVA中文站社区门户"r `s9P,db
public ConcreteCricle extends AbstactCircle{
TK D!wq*e.P,CY              public ConcreteCricle{}JAVA中文站社区门户x"H&s2b l7Ue^
              public ConcreteCricle(double radius){this.radius=radius;}JAVA中文站社区门户"vZA3@DJ3S
              public void render{JAVA中文站社区门户}? ]D"PuX
                       .out.prf("画个半径%f实心圆\n",getRadius);
]^c"z3c U              }JAVA中文站社区门户0Hxc4b,j }-R6_P `0k
}
#g*u\(^1d*k:a8B6btHollowCircle.javaJAVA中文站社区门户@ }n3M&s4r9Yu
public HollowCircle extends AbstactCircle{JAVA中文站社区门户m7o d aN L
              public HollowCircle{}JAVA中文站社区门户-? cycks
              public HollowCircle(double radius){this.radius=radius;}
(Q8?Nl1E%@\              public void render{JAVA中文站社区门户6v#Rv$]@+Y&}(i;s
                       .out.prf("画个半径%f空心圆\n",getRadius);
}#VHY9A$I B"N              }
1c [u[8R!S9C)K3o8pV}
8a1{Tb9qg1q由于共同定义被提取至AbstactCircle类中并于扩展时继承了下来所以在ConcreteCricle和HollowCircle中不用重复定义只要定义个别对render处理方式就行了由ConcreteCricle和HollowCircle都是AbstactCircle子类因而可以使用AbstactCircle上有定义实现接口来实现子类例子上思路方法如范例所示:
.L({5Dp/V:Ex1_.M/ppublic CircleDemo{
*\~nG`8IsGGO       public void (String args){JAVA中文站社区门户 v@-H4Gl([
              renderCircle( ConcreteCircle(3.33));
L1pmU8{p^              renderCircle( HollowCircle(10.2));
;?ej0~W f%z.?I     }
$GR(A3}&^     public void renderCircle(AbstractCircle circle){
+J"mBA dbLA3c              circle.render;JAVA中文站社区门户?$D9a2v;~
     }
fS+Yx5Sx zJ,H}JAVA中文站社区门户7[o sWd;?j4|)GdG
由于AbstractCircle上定义有render思路方法所以可用于实现子类例子思路方法这是继承上多台实现哟个例子用用执行结果如下:
*C;n*@0?z(}~:AAt个半径 3.330000实心圆JAVA中文站社区门户Bqh2]wq#h|
个半径10.200000空心圆

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: