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变量是一个指向类父类构造成员函数的变量,你可以通过调用它,来迅速完成对子类的构造成员函数的设计。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器