output+=ps[i].toString();
System.out.println(output);
}
}
package多态性;
interfacePerson{
publicabstractdoublepay();
}
classAssistantimplementsPerson{
protectedStringname;
protecteddoubleclasssum;
publicAssistant(Stringname,doubleclasssum){
this.name=name;
this.classsum=classsum;
}
publicdoublepay(){
return800+classsum*25;
}
publicStringtoString(){
return"姓名:
"+this.name+"\t工资支出:
"+this.pay()+"\n";
}
}
classInstructorimplementsPerson{
protectedStringname;
protecteddoubleclasssum;
publicInstructor(Stringname,doubleclasssum){
this.name=name;
this.classsum=classsum;
}
publicdoublepay(){
return1000+classsum*35;
}
publicStringtoString(){
return"姓名:
"+this.name+"\t工资支出:
"+this.pay()+"\n";
}
}
classAssistantProfessonimplementsPerson{
protectedStringname;
protecteddoubleclasssum;
publicAssistantProfesson(Stringname,doubleclasssum){
this.name=name;
this.classsum=classsum;
}
publicdoublepay(){
return1200+classsum*40;
}
publicStringtoString(){
return"姓名:
"+this.name+"\t工资支出:
"+this.pay()+"\n";
}
}
classProfessorimplementsPerson{
protectedStringname;
protecteddoubleclasssum;
publicProfessor(Stringname,doubleclasssum){
this.name=name;
this.classsum=classsum;
}
publicdoublepay(){
return1400+classsum*50;
}
publicStringtoString(){
return"姓名:
"+this.name+"\t工资支出:
"+this.pay()+"\n";
}
}
(2):
MyShape接口:
package多态性1;
importjava.awt.Graphics;
publicinterfaceMyShape{
//intX1,Y1,X2,Y2;
//methodtodrawtheshape
/*Declareheaderformethoddraw*/
voiddraw(Graphicsg);
//setandgetmethodsforeachofthefourprivatevariables
voidsetX1(intx1);
voidsetX2(intx2);
voidsetY1(inty1);
voidsetY2(inty2);
intgetX1();
intgetX2();
intgetY1();
intgetY2();
}//endinterfaceMyShape
MyLine.java:
package多态性1;
importjava.awt.Graphics;
//MyLine.java
//DeclarationofclassMyLine
publicclassMyLineextendsObjectimplementsMyShape{
privateintX1,X2,Y1,Y2;
publicMyLine(intx1,inty1,intx2,inty2){
//TODOAuto-generatedconstructorstub
setX1(x1);
setY1(y1);
setX2(x2);
setY2(y2);
}
@Override
publicvoiddraw(Graphicsg){
//TODOAuto-generatedmethodstub
g.drawLine(getX1(),getY1(),getX2(),getY2());
}
@Override
publicvoidsetX1(intx1){
//TODOAuto-generatedmethodstub
X1=x1;
}
@Override
publicvoidsetX2(intx2){
//TODOAuto-generatedmethodstub
X2=x2;
}
@Override
publicvoidsetY1(inty1){
//TODOAuto-generatedmethodstub
Y1=y1;
}
@Override
publicvoidsetY2(inty2){
//TODOAuto-generatedmethodstub
Y2=y2;
}
@Override
publicintgetX1(){
//TODOAuto-generatedmethodstub
returnX1;
}
@Override
publicintgetX2(){
//TODOAuto-generatedmethodstub
returnX2;
}
@Override
publicintgetY1(){
//TODOAuto-generatedmethodstub
returnY1;
}
@Override
publicintgetY2(){
//TODOAuto-generatedmethodstub
returnY2;
}
}//endclassMyLine
MyOval.java:
package多态性1;
importjava.awt.Graphics;
importjava.awt.Graphics2D;
importjava.awt.geom.Ellipse2D;
importjava.awt.geom.Rectangle2D;
publicclassMyOvalextendsObjectimplementsMyShape{
privateintleftX,topY,width,height;
publicMyOval(intx1,inty1,intx2,inty2){
//TODOAuto-generatedconstructorstub
setX1(x1);
setY1(y1);
setX2(x2);
setY2(y2);
}
@Override
publicvoiddraw(Graphicsg){
//TODOAuto-generatedmethodstub
Graphics2Dg2=(Graphics2D)g;
//画矩形
Rectangle2Drect=newRectangle2D.Double(leftX,topY,width,height);
Ellipse2Dellipse=newEllipse2D.Double();
ellipse.setFrame(rect);
g2.draw(ellipse);
}
@Override
publicvoidsetX1(intx1){
//TODOAuto-generatedmethodstub
leftX=x1;
}
@Override
publicvoidsetX2(intx2){
//TODOAuto-generatedmethodstub
width=x2;
}
@Override
publicvoidsetY1(inty1){
//TODOAuto-generatedmethodstub
topY=y1;
}
@Override
publicvoidsetY2(inty2){
//TODOAuto-generatedmethodstub
height=y2;
}
@Override
publicintgetX1(){
//TODOAuto-generatedmethodstub
returnleftX;
}
@Override
publicintgetX2(){
//TODOAuto-generatedmethodstub
returnwidth;
}
@Override
publicintgetY1(){
//TODOAuto-generatedmethodstub
returntopY;
}
@Override
publicintgetY2(){
//TODOAuto-generatedmethodstub
returnheight;
}
}
MyRectangle.java:
package多态性1;
importjava.awt.Graphics;
importjava.awt.Graphics2D;
importjava.awt.geom.Ellipse2D;
importjava.awt.geom.Rectangle2D;
publicclassMyRectangleextendsObjectimplementsMyShape{
privateintleftX,topY,width,height;
publicMyRectangle(intx1,inty1,intx2,inty2){
//TODOAuto-generatedconstructorstub
setX1(x1);
setY1(y1);
setX2(x2);
setY2(y2);
}
@Override
publicvoiddraw(Graphicsg){
//TODOAuto-generatedmethodstub
Graphics2Dg2=(Graphics2D)g;
//画矩形
Rectangle2Drect=newRectangle2D.Double(leftX,topY,width,height);
g2.draw(rect);
}
@Override
publicvoidsetX1(intx1){
//TODOAuto-generatedmethodstub
leftX=x1;
}
@Override
publicvoidsetX2(intx2){
//TODOAuto-generatedmethodstub
width=x2;
}
@Override
publicvoidsetY1(inty1){
//TODOAuto-generatedmethodstub
topY=y1;
}
@Override
publicvoidsetY2(inty2){
//TODOAuto-generatedmethodstub
height=y2;
}
@Override
publicintgetX1(){
//TODOAuto-generatedmethodstub
returnleftX;
}
@Override
publicintgetX2(){
//TODOAuto-generatedmethodstub
returnwidth;
}
@Override
publicintgetY1(){
//TODOAuto-generatedmethodstub
returntopY;
}
@Override
publicintgetY2(){
//TODOAuto-generatedmethodstub
returnheight;
}
}
TestDrawWindow代码:
package多态性1;
//TestDrawWindow.java
//Programrandomlydrawsshapes
importjava.awt.*;
importjavax.swing.*;
publicclassTestDrawWindowextendsJFrame{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
privateMyShapeshape[]=newMyShape[15];
//Constructor
publicTestDrawWindow()
{super("Drawshapes");
intshapeType;//randomvaluetodetermineshapetocreateanddraw
intx1,y1,x2,y2;//randomlychosencoordinatesforanewshape
for(inti=0;ix1=(int)(Math.random()*400);
x2=(int)(Math.random()*400);
y1=(int)(Math.random()*400);
y2=(int)(Math.random()*400);
shapeType=(int)(Math.random()*3)+1;
switch(shapeType){
case1:
//line
shape[i]=newMyLine(x1,y1,x2,y2);
break;
case2:
//oval
shape[i]=newMyOval(x1,y1,x2,y2);
break;
case3:
//rectangle
shape[i]=newMyRectangle(x1,y1,x2,y2);
break;
}//endswitch
}//endfor
}//endconstructor
//drawshapes
public