/**
*
* 自定义图形的基类
*/
public abstract class MyShape
{
/**形状的名字*/
protected String name;
/*
* protected访问控制符表示只有本类和子类能够访问该属性
*/
/**抽象方法,获取形状的周长*/
public abstract double getGrith();
/**抽象方法,获取形状的面积*/
public abstract double getArea();
/**抽象方法,输出形状*/
public abstract String toString();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
*
* 三角形
*/
public class Triangle extends MyShape
{
private double sideA;
private double sideB;
private double sideC;
public static final String SIDEERR = "三角形的边长不能够小于0!";
public static final String SHAPEERR = "三角形的两边之和必须大于第三边";
public Triangle()
{
init();
}
public Triangle(double a,double b,double c)
{
/*
* 如果给定的三条边能够组成三角形,便用给定的边长构成三角形
*/
}
private void init()
{
this.sideA = 3;
this.sideB = 4;
this.sideC = 5;
}
private boolean isTrianglelegal(double a,double b,double c)
{
//三条边的长度必须大于0
if((a<=0) || (b<=0) || (c<=0))
{
System.out.println(SIDEERR);
return false;
}
else if((a+b<c) || (a+c<b) || (b+c<a))
{
//两边之和必须大于第三边
System.out.println(SHAPEERR);
return false;
}
return true;
}
public double getArea() {
double s = (this.sideA + this.sideB + this.sideC) /2;
return Math.sqrt(s*(s - this.sideA) * (s-this.sideB) * (s-this.sideC));
}
public double getGrith() {
return this.sideA + this.sideB + this.sideC;
}
public String toString() {
// TODO Auto-generated method stub
return "三角形的名字是:" + this.name + " ,它的三条边的边长分别是:"
+ this.sideA + ", " + this.sideB + ", " + this.sideC;
}
public double getSideA() {
return sideA;
}
public void setSideA(double sideA) {
if(this.isTrianglelegal(sideA, this.sideB, this.sideC))
{
this.sideA = sideA;
}
}
public double getSideB() {
return sideB;
}
public void setSideB(double sideB) {
if(this.isTrianglelegal(this.sideA, sideB, this.sideC))
{
this.sideB = sideB;
}
}
public double getSideC() {
return sideC;
}
public void setSideC(double sideC)
{
if(this.isTrianglelegal(this.sideA, this.sideB, sideC))
{
this.sideC = sideC;
}
}
public static void main(String[] args)
{
Triangle test = new Triangle();
test.setName("myTriangle");
System.out.println(test.toString());
System.out.println("三角形的周长是:" + test.getGrith());
System.out.println("三角形的面积是:" + test.getArea());
}
}
/**
*
* 长方形
*/
public class Rectangle extends MyShape
{
private double length;
private double width;
public static final String SIDEERR = "长方形的长和宽必须大于0!";
public Rectangle()
{
init();
}
public Rectangle(double a,double b)
{
if((a<=0) || (b<=0))
{
System.out.println(SIDEERR);
init();
}
else
{
this.length = a;
this.width = b;
}
}
private void init()
{
this.length = 5;
this.width = 4;
}
public double getArea() {
return this.length * this.width;
}
public double getGrith() {
return (this.length + this.width)/2;
}
public String toString() {
return "矩形的名字为:" + this.name + ",长为" + this.length + ",宽为 " + this.width;
}
public double getLength() {
return length;
}
public void setLength(double length) {
if(length>0)
{
this.length = length;
}
else
{
System.out.println(SIDEERR);
}
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
if(width>0)
{
this.width = width;
}
else
{
System.out.println(SIDEERR);
}
}
public static void main(String [] args)
{
Rectangle test = new Rectangle();
test.setName("myRectangle");;
System.out.println(test.toString());
System.out.println("矩形的周长是:" + test.getGrith());
System.out.println("矩形的面积是:" + test.getArea());
}
}
分享到:
相关推荐
开发者通常会继承`LinearLayout`或`RelativeLayout`,重写`onMeasure()`和`onLayout()`方法来实现自定义的测量和布局逻辑,确保视图在不同屏幕尺寸下都能适配并保持良好的用户体验。 2. **三级缓存**: 在Android...
3. **自定义窗体形状**:通过重写`OnPaint`事件,使用`Graphics`对象绘制自定义形状。需要启用`AllowTransparency`属性并设置`FormBorderStyle`为`None`。 ```csharp protected override void OnPaint...
1. **创建新类**:首先,你需要继承一个已有的View类,如`View`、`TextView`或`ImageView`等,然后在新的类中添加自定义功能。 2. **重写onDraw()方法**:这是绘制View的核心,使用`Canvas`对象进行绘图操作,如画...
1. **创建新类**:在C#中,我们首先需要继承一个现有的控件类,如`System.Windows.Forms.Control`,来创建我们的自定义控件。例如,我们可以创建一个名为`MyCustomLabel`的新类,继承自`Control`。 2. **绘制控件**...
1. **自定义View类**:首先,我们需要创建一个继承自`LinearLayout`或`FrameLayout`的自定义View类。这样可以利用布局管理器的特性来安排各个标签的位置。 2. **绘制标签**:在自定义View中,重写`onDraw()`方法来...
首先,自定义`EditText`通常通过继承`EditText`类来实现。在Java代码中,我们需要创建一个新的类,比如`CustomEditText`,并继承`EditText`: ```java public class CustomEditText extends EditText { public ...
首先,要创建一个自定义View,我们需要继承`View`或`ViewGroup`类。在这个例子中,我们将从`View`类继承。创建一个新的Java类,例如`CustomRectangleView`: ```java public class CustomRectangleView extends ...
6. 编译和运行:完成以上步骤后,将自定义的CShapeButton类添加到你的对话框或窗口类中,替换原有的CButton控件,编译并运行项目,就可以看到自定义形状的按钮了。 在实际应用中,你可能还需要考虑其他细节,比如...
自定义控件是在.NET Framework中通过继承现有的控件或直接继承自Control类来创建的。这种控件可以扩展默认控件的功能,提供独特的外观和行为,以满足特定项目的需求。在本案例中,“水晶按钮”控件可能是对标准...
首先,我们需要创建一个新的Java类,继承自View或ViewGroup。这个类将作为我们的自定义控件。在这个类中,我们需要重写以下关键方法: 1. `onDraw(Canvas canvas)`: 这个方法用于在画布上绘制我们的控件。我们可以...
如果想实现更复杂的按钮效果,如渐变色、圆角或者自定义图片,可以创建自定义控件,继承自ButtonBase类,并重写OnPaint方法,利用Graphics对象进行绘制。 接下来,我们要关注的是交互性。360界面中的按钮通常有动态...
同时,这也是一个很好的实践案例,可以帮助开发者提升对Android UI组件自定义的理解和运用能力。 总的来说,自定义SeekBar是Android开发中提高用户体验和界面设计的重要手段。通过对SeekBar的扩展和改造,开发者...
例如,可以绘制圆角矩形或者自定义形状的边框。 3. **文本样式**:GroupBox的标题文本可以通过调整字体、颜色、对齐方式等属性进行美化。可以使用TextRenderer类提供的方法来绘制文本,实现更精细的控制。 4. **...
- **创建自定义View类**:继承自`View`或其子类(如`TextView`、`ImageView`等)。 - **重写关键方法**: - `onMeasure()`:用于测量View的大小。 - `onDraw(Canvas canvas)`:绘制View的主要内容。 - `...
开发者需要继承`View`或`ViewGroup`类,并重写必要的方法,如`onDraw()`来绘制视图,`onMeasure()`和`onLayout()`来处理测量和布局。自定义View还可以包含触摸事件处理,如`onTouchEvent()`。同时,理解Android的...
1. 继承已存在的View类(如Button、TextView等)或 ViewGroup 类,以便利用其基本功能。 2. 在onDraw()方法中重写绘图逻辑,绘制自定义的视图形状和内容。 3. 实现onMeasure()和onLayout()方法,确保控件的大小和...
- 创建自定义控件通常涉及以下几个步骤:定义类,继承自适当的基类(如`UserControl`或`Control`),添加属性、事件和方法,设计控件的外观(样式和模板)。 3. **模板和样式**: - `ControlTemplate`定义了控件...
1. 创建自定义View类:首先,我们需要创建一个新的View类,继承自View类,并重写onDraw()方法。在这个方法中,我们将进行实际的绘制工作。 2. 初始化Path对象:在自定义View的构造函数或onMeasure()方法中,初始化...
2. **自定义视图(UIView)**: 要创建自定义进度条,首先我们需要创建一个继承自`UIView`的子类。在这个子类中,我们可以重写`draw(_ rect: CGRect)`方法来绘制进度条的形状、颜色和其他视觉效果。 3. **属性定义**...
例如,我们可以创建一个名为`CustomTextAndImgView`的类,它继承自`View`。 2. 在这个新的类中,我们需要重写`onDraw()`方法,这是绘制View的主要入口。在这个方法里,我们可以使用`Canvas`对象进行绘图,包括绘制...