java 初学之面向对象设计 三角形,圆等设计
首先要对面向对象有一定了解,下面利用继承与派生的方式来演示java的面向对象过程;
创建一个java工程,添加一个新的pakage:Shapec;
添加一个新类,写入代码
/* * To change this template, choose Tools | Templates * and open the template in the editor. */
package Shapec; /** * * @author Administrator */ //抽象类,图形借口 public abstract class Shape { public static double PI = Math.PI; //π=3.1415926 public abstract double GetArea(); //计算面积 public abstract double GetLong();//计算周长 }
第二部,继承与派生,
新建5个新的类,分别命名为:J_Circle, J_FiveS ,J_Ponit,J_Triangle,J_Rectangle
其中 J_Ponit 为坐标点类。下面给出各个代码:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Shapec; /** * * @author Administrator */ public class J_Circle extends Shape { public double m_r; public double m_x , m_y; public J_Circle(double r) { m_x = m_y = 0; m_r = r; } public J_Circle(double m_r, double m_x, double m_y) { this.m_r = m_r; this.m_x = m_x; this.m_y = m_y; } public J_Circle(J_Ponit p,double r){ m_x = p.m_x; m_y = p.m_y; m_r = r; } // 计算面积 public double GetArea() { return (Shape.PI * m_r * m_r); } // 计算周长 public double GetLong() { return (2 * PI * m_r); } @Override public String toString() { return("圆\n"+"面积为:" + GetArea() + ";\n周长为:"+ GetLong()); } }
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Shapec; /** * * @author Administrator */ public class J_FiveS extends Shape { private double E; public double m_a; public J_Ponit a; public J_Ponit b; public J_Ponit c; public J_Ponit d; public J_Ponit e; public J_FiveS( J_Ponit a, J_Ponit b, J_Ponit c, J_Ponit d, J_Ponit e) { this.E = 1.72; this.m_a = J_Ponit.GetLongC(a, b); this.a = a; this.b = b; this.c = c; this.d = d; this.e = e; } // 五边形一个点坐标和图形中心的坐标 public J_FiveS(J_Ponit a, J_Ponit o){ this.E = 1.72; double t = J_Ponit.GetLongC(a, o); m_a = Math.sqrt(2 * t * t * (1 - Math.cos(72 *( Math.PI / 180)))); } public J_FiveS(double a) { this.E = 1.72; this.m_a = a; } @Override public double GetArea() { return E*m_a*m_a; } @Override public double GetLong() { return 5*m_a; } @Override public String toString() { return("五边形 \n"+"面积为:" + GetArea() + ";\n周长为:"+ GetLong()); } }
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Shapec; /** * * @author Administrator */ public class J_Ponit { public double m_x; public double m_y; public J_Ponit(double m_x, double m_y) { this.m_x = m_x; this.m_y = m_y; } public J_Ponit() { m_x = 0; m_y = 0; } public J_Ponit(J_Ponit p) { m_x = p.m_x; m_y = p.m_y; } public void SetX(double x){ m_x = x; } public void SetY(double y){ m_y = y; } public static double GetLongC(J_Ponit left,J_Ponit right){ return Math.sqrt(Math.pow((left.m_x - right.m_x),2) + Math.pow((left.m_y - right.m_y), 2)); } @Override public String toString() { return ("x="+m_x+",y="+m_y); } }
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Shapec; /** * * @author Administrator */ public class J_Triangle extends Shape{ public double m_a; public double m_b; public double m_c; private double m_p; public J_Ponit a,b,c; private void Culatep(){ m_p = (m_a + m_b + m_c) / 2; } public J_Triangle( J_Ponit a, J_Ponit b, J_Ponit c) { this.a = new J_Ponit(a); this.b = new J_Ponit(b); this.c = new J_Ponit(c); double a1 = J_Ponit.GetLongC(b,c); double b1 = J_Ponit.GetLongC(a,c); double c1 = J_Ponit.GetLongC(a,b); if((a1 + b1) > c1 && (a1 - b1) < c1){ m_a = a1; m_b = b1; m_c = c1; } else{ m_a = m_b = m_c = 0; } Culatep(); } // 正三角型 public J_Triangle(double x) { m_a = x; m_b = x; m_c = x; Culatep(); } // 等腰三角形 public J_Triangle(double a ,double x) { if((a + x) >x && (a - x) < x){ m_a = a; m_b = m_c = x; } else{ m_a = m_b = m_c = 0; } Culatep(); } //普通三角形 public J_Triangle(double ma, double mb, double mc) { if((ma - mb) < mc && (ma + mb) > mc){ this.m_a = ma; this.m_b = mb; this.m_c = mc; } else{ m_a = m_b = m_c = 0; } Culatep(); } @Override public double GetArea() { return Math.sqrt(m_p*(m_p - m_a)*(m_p - m_b)*(m_p - m_c)); } @Override public double GetLong() { return (m_a + m_b + m_c); } @Override public String toString() { return("三角形 \n"+"面积为:" + GetArea() + ";\n周长为:"+ GetLong()); } }
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Shapec; /** * * @author Administrator */ public class J_Rectangle extends Shape { //矩形四个顶点 public J_Ponit a,b,c,d; double m_a; double m_b; public J_Rectangle(J_Ponit a, J_Ponit b, J_Ponit c, J_Ponit d) { this.a = new J_Ponit(a); this.b = new J_Ponit(b); this.c = new J_Ponit(c); this.d = new J_Ponit(d); m_a = J_Ponit.GetLongC(a, b); m_b = J_Ponit.GetLongC(a, d); } public J_Rectangle(double a, double b) { m_a = a; m_b = b; } // 获得边长 public double GetSide_one(){ return m_a; } public double GetSide_two(){ return m_b; } //计算面积 @Override public double GetArea() { return (m_a * m_b); } //计算周长 @Override public double GetLong() { return (2 * m_a + 2 * m_b); } @Override public String toString() { return("矩形 \n"+"面积为:" + GetArea() + ";\n周长为:"+ GetLong()); } }
最后在mian中调用;
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package shapecu; import Shapec.J_Rectangle; import Shapec.J_Ponit; import Shapec.J_Triangle; import Shapec.J_Circle; import Shapec.Shape; import Shapec.J_FiveS; /** * * @author Administrator */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Shape shape[] = new Shape[4]; // 矩形坐标 J_Ponit b = new J_Ponit(1, 0); J_Ponit c = new J_Ponit(1, 1); J_Ponit d = new J_Ponit(0, 1); J_Ponit a = new J_Ponit(0, 0); shape[0] = new J_Rectangle(a, b, c, d); //三角形坐标 J_Ponit a1 = new J_Ponit(0, 0); J_Ponit b1 = new J_Ponit(0, 4); J_Ponit c1 = new J_Ponit(3, 0); shape[1] = new J_Triangle(a1, b1, c1); // 圆坐标和半径 J_Ponit o = new J_Ponit(0, 0); shape[2] = new J_Circle(o, 3); // 五边形,定义边长为3; shape[3] = new J_FiveS(3); // 输出: System.out.println(shape[0]); System.out.println(shape[1]); System.out.println(shape[2]); System.out.println(shape[3]); } }