夜光精华:Java面向对象编程 学习笔记(六)在校资源

版权声明: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());
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_41987706/article/details/91432182
今日推荐