版权声明:Genius https://blog.csdn.net/weixin_41987706/article/details/91432182
夜光序言:
曾经,长街落尽了风雪,连屋檐也挂满了霜降,一弯冷月说我是你归巢的燕。
现在,你经受了时光的怠慢,连昔日情分也寻不回,陌路一遭再暖不了我的手。
正文:Java的接口
接口的实现
实现了绘图接口的圆形类的子类
实现了绘图接口的矩形类的子类
深入理解接口
package shapes; //定义该类属于shapes包
import java.awt.*; //加载awt包
interface DrawShapes
{
abstract void draw(Graphics g); //抽象方法1:绘制图形
abstract void fillcolor(Graphics g,Color c); //抽象方法2:为图形染色
}
// 在Triangle 基础上实现了绘制图形接口 DrawShapes的新类
package shapes;
import java.awt.*;
public class TriangleNew extends Triangle implements DrawShapes
{
int[] xCoords; //新类添加的属性,绘制三角形的x坐标点
int[] yCoords; //新类添加的属性,绘制三角形的y坐标点
public TriangleNew(int a,int b,int c)
{
super(a,b,c); //调用父类的构造方法
xCoords=new int[3]; //初始化坐标点数组
yCoords=new int[3]; //初始化坐标点数组
}
public void draw(Graphics g) //实现DrawShapes接口中的方法
{
setCoords(260,300); //计算三角形的3个点位置坐标,默认起点(200,300)
g.drawPolygon(xCoords,yCoords,3); //调用方法画空心三边形
}
public void fillcolor(Graphics g,Color c) //实现DrawShapes接口中的方法
{
g.setColor(c);
g.fillPolygon(xCoords,yCoords,3); //调用方法画实心三边形
}
//调用Graphics类的多边形方法绘制三角形,需要先计算三角形的点坐标系列x、y
public void setCoords(int x0,int y0) //计算坐标的方法
{
int x1=x0, y1=y0; //设定第1个点的x、y坐标
int x2=x1+sidea, y2=y1; //计算第2个点的x、y坐标
int temp=sidea*sidea+sideb*sideb-sidec*sidec;
int temp2=(int)temp/(2*sidea); //余弦公式
int x3=x2-temp2;
int y3=y2-(int)Math.sqrt(sideb*sideb-temp2*temp2);
xCoords[0]=x1;
yCoords[0]=y1;
xCoords[1]=x2;
yCoords[1]=y2;
xCoords[2]=x3;
yCoords[2]=y3;
}
}
//继承于Rectangle且实现了接口的RectangleNew
package shapes;
import java.awt.*; //加载awt包
public class RectangleNew extends shapes.Rectangle implements DrawShapes //继承于Rectangle
{
public RectangleNew(int h,int w)
{
super(h,w); //调用父类的构造方法
}
public void draw(Graphics g) //实现DrawShapes接口中的方法
{
g.drawRect(400,200,width,height); //调用Graphics类的方法画空心矩形
}
public void fillcolor(Graphics g,Color c) //实现DrawShapes接口中的方法
{
g.setColor(c);
g.fillRect(400,200,width,height); //调用Graphics类的方法画实心矩形
}
}
/* 在Circle 基础上实现了绘制图形接口 DrawShapes的新类*/
package shapes;
import java.awt.*;
public class CircleNew extends Circle implements DrawShapes //继承于Circle并实现接口
{
int xCoord=100; //圆心x坐标,默认100
int yCoord=300; //圆心y坐标,默认300
public CircleNew(int r)
{
super(r); //调用父类的构造方法
}
public void draw(Graphics g) //实现DrawShapes接口中的方法
{
g.drawOval(xCoord-radius,yCoord-radius,2*radius,2*radius); //画空心圆
}
public void fillcolor(Graphics g,Color c) //实现DrawShapes接口中的方法
{
g.setColor(c); //设置绘图颜色
g.fillOval(xCoord-radius,yCoord-radius,2*radius,2*radius); //画实心圆
}
}
/* 编写一个测试类 TestShapes2.java, 测试各图形类运行是否正确 */
import java.awt.*; //加载Java的抽象窗口工具包
import java.applet.*; //加载Java的小程序applet包
import shapes.*; //加载shapes包中的所有类
public class TestShapes2 extends Applet
{
CircleNew c; //声明一个圆形对象
RectangleNew r; //声明一个矩形对象
TriangleNew t; //声明一个三角形对象
Label prompt,cp,rp,tp,errow; //定义几个标签输出面积、周长、出错信息
public void init()
{
prompt= new Label(" 实现了绘图接口的图形类综合示例 ");
cp=new Label(" "); //输出圆形周长、面积
rp=new Label(" "); //输出矩形周长、面积
tp=new Label(" "); //输出三角形周长、面积
errow=new Label(" "); //输出异常信息
add(prompt); add(cp); add(rp); add(tp); add(errow);
setFont(new Font("微软雅黑",Font.BOLD,20));
setSize(800,400);
c= new CircleNew(50); //测试半径为给定值的圆形
c.setCircumference(); //计算周长
c.setArea(); //计算面积
cp.setText("\n圆: CircleNew(50),周长="+c.getCircumference()+" 面积="+c.getArea());
r= new RectangleNew(30,50); //测试高、宽为给定值的矩形
r.setCircumference();
r.setArea();
rp.setText("\n矩形: Rectanglenew(30,50),周长=" +r.getCircumference()+" 面积="+r.getArea());
t= new TriangleNew(80,100,50); //测试给定3条边长的三角形
t.setCircumference();
t.setArea();
tp.setText("\n三角形: TriangleNew(80,100,50),周长="+t.getCircumference()+" 面积="+t.getArea()+"\n");
}
public void paint(Graphics g) //调用paint()方法在屏幕上显示图形
{
r.draw(g); //画矩形
r.fillcolor(g,Color.red); //用红色填充矩形
c.draw(g); //画圆形
c.fillcolor(g,Color.blue); //用蓝色填充圆形
t.draw(g); //画三角形
t.fillcolor(g,Color.green); //用绿色填充矩形
}
}
// 接口回调与接口作参数示例
interface SpeakHello // 接口SpeakHello
{
void speakHello(); //接口中的抽象方法
}
class Chinese implements SpeakHello//实现接口的类Chinese
{
public void speakHello()
{
System.out.println("中国人习惯问候语:你好,吃饭了吗? ");
}
}
class English implements SpeakHello//实现接口的类English
{
public void speakHello()
{
System.out.println("英国人习惯问候语:你好,天气不错 ");
}
}
class KindHello //体现接口回调的类KindHello
{
public void lookHello(SpeakHello hello) //用接口做参数
{
hello.speakHello(); //接口回调
}
}
public class TestInterface { //测试类
public static void main(String args[])
{
KindHello kindHello=new KindHello();
kindHello.lookHello(new Chinese()); //用实现接口的类对象做参数
kindHello.lookHello(new English());
}
}