类的深入研究
1:在Java中利用担任
面向工具的措施设计中最为强大的成果是类的担任,类的担任答允你在一个已经存在的类之上编写新的措施,譬喻,你想成立一个可在屏幕上显示并能填充它的矩形类,你可以从新开始可能操作旧的矩形类,下面的部门将向你先容如何担任已存在的Rectangle类,而不需重写个中的代码。
好比成立一个fillRect类,该类可以利用Rectangle类中所有已界说的数据和成员函数,如:width、height等数据和getArea等成员函数,就但是利用担任的要领来实现。利用extands要害字让Java措施员可以或许担任已有类的成员函数,为了担任Rectangle类,你必需引用旧的Rectangle类,你必需引用旧的Rectangle类,而且在新类的说明中引用它,好比:
import Shapes.Rectangle;
class fillRect extands Rectangle
{
.....
}
2:成员函数的重载
担任之后,如何使fillRect类比Rectangle类有所提高呢?我们可以用如下代码来实现一个新的drawRect成员函数,它将大大缩短代码,并能填充矩形,而不是仅仅画出矩形的表面:
private String makeString(chr ch,int num)
{
StringBuffer str=new StringBuffer();
for(int i=num;i>0;i--)
str.append(ch);
return str.toString();
}
public void drawRect()
{
for(int i=height;i>0;i--)
System.out.println(makeString("#",width));
}
留意这里我们利用了StringBuffer类。之所以利用StringBuffer是因为String只能发生一个静态范例--它的巨细是不能改变的,而StringBuffer可以或许发生一个可变长度的字符串范例。
在这里,drawRect成员函数被重载了,通过利用沟通的成员函数名字,你可以用新的成员函数来取代旧的成员函数。不外,那些被说明为final的成员函数是不能被重载的。
留意,你不必在新的类中包括那些与被担任类沟通的代码,而只需要插手你想要的对象,但你必需成立一个新的结构成员函数,以区分这两个差异的类。
新类的全貌如下所示,你可以发明通过担任Rectangle类,代码变得很是简朴明白。
class fillRect extands Rectangle
{
public fillRect(int w,int h)
{
supper(w,h);
private String makeString(char ch,int num)
{
StringBuffer str=new StringBuffer();
for(int i=num;i>0;i--)
str.append(ch);
return str.toString();
}
public void drawRect()
{
for(int i=height;i>0;i--)
System.out.printlm(makeString("#",width));
}
}
}
3:利用接口
Java可以建设一种称作接口(interface)的类,在这个类中,所有的成员函数都是抽象的,也就是说它们都只有说明没有界说,你可以如下所示来说明一个接口。
public interface interfaceName
//成员函数说明
接口中成员函数的缺省引用范例是private,接口(interface)的内部变量是不行变动的,而且老是static和final。
通过利用要害字implement,你可以在界说类时担任一个接口。不外与extends差异的是,一个类可以同时担任多个接口。
利用接口的利益在那里呢?通过建设一个接口,你可以说明一整套抽象的成员函数而无须去详细实现它,所有担任了这个接口的类,都将有着具有沟通原形的成员函数。譬喻,你想所有的shapes都有一个draw()成员函数,你可以建设一个接口而且用Shape定名:
public interface Shape
void draw();
此刻,无论你何时建设一个担任自Shape的类,都将拥有一个成员函数draw()。
4:类的转换
类的转换,与差异范例的变量之间的转换有相似之处,但并纷歧样。
我们可以把一个父类的工具转换成一个子类工具,下面的代码说明一个类转换的例子,个中Y类是从X类担任而来的:
Y y=new Y();
X x;
x=y;
需要留意的是两个子类之间的转换是不行以的。
5:null,this和supper变量
所有的类都有三种变量:null、this和supper。
null变量不指向任何实际工具,而是指向一个空工具,如下例所示:
Rectangle rect=null;
该例发生一个矩形类的变量,但不建设一个实际的工具。别的,如果一个成员函数需要一个工具作为参数时,你同样可以用null取代。
this变量指向工具自己,一个类可以通过this变量来得到一个代表它自身的工具变量。
supper变量是一个指向类父类结构成员函数的变量,你可以通过挪用它,来迅速完成对子类的结构成员函数的设计。