`

自定义形状类(继承的运用)

    博客分类:
  • J2SE
阅读更多
/**
 * 
 * 自定义图形的基类
 */
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...

    android 自定义view及自定义属性

    1. **创建新类**:首先,你需要继承一个已有的View类,如`View`、`TextView`或`ImageView`等,然后在新的类中添加自定义功能。 2. **重写onDraw()方法**:这是绘制View的核心,使用`Canvas`对象进行绘图操作,如画...

    练习自定义控件代码

    1. **创建新类**:在C#中,我们首先需要继承一个现有的控件类,如`System.Windows.Forms.Control`,来创建我们的自定义控件。例如,我们可以创建一个名为`MyCustomLabel`的新类,继承自`Control`。 2. **绘制控件**...

    Android自定义标签选择器TagView

    1. **自定义View类**:首先,我们需要创建一个继承自`LinearLayout`或`FrameLayout`的自定义View类。这样可以利用布局管理器的特性来安排各个标签的位置。 2. **绘制标签**:在自定义View中,重写`onDraw()`方法来...

    android 自定义Editext

    首先,自定义`EditText`通常通过继承`EditText`类来实现。在Java代码中,我们需要创建一个新的类,比如`CustomEditText`,并继承`EditText`: ```java public class CustomEditText extends EditText { public ...

    Android自定义View绘制几何图形

    首先,要创建一个自定义View,我们需要继承`View`或`ViewGroup`类。在这个例子中,我们将从`View`类继承。创建一个新的Java类,例如`CustomRectangleView`: ```java public class CustomRectangleView extends ...

    VC 界面编程-任意形状的按钮

    6. 编译和运行:完成以上步骤后,将自定义的CShapeButton类添加到你的对话框或窗口类中,替换原有的CButton控件,编译并运行项目,就可以看到自定义形状的按钮了。 在实际应用中,你可能还需要考虑其他细节,比如...

    C#自定义控件---自定义水晶按钮控件完整源码.rar

    自定义控件是在.NET Framework中通过继承现有的控件或直接继承自Control类来创建的。这种控件可以扩展默认控件的功能,提供独特的外观和行为,以满足特定项目的需求。在本案例中,“水晶按钮”控件可能是对标准...

    自定义控件+RotateAnimation

    首先,我们需要创建一个新的Java类,继承自View或ViewGroup。这个类将作为我们的自定义控件。在这个类中,我们需要重写以下关键方法: 1. `onDraw(Canvas canvas)`: 这个方法用于在画布上绘制我们的控件。我们可以...

    c# winform 自定义界面实例代理

    如果想实现更复杂的按钮效果,如渐变色、圆角或者自定义图片,可以创建自定义控件,继承自ButtonBase类,并重写OnPaint方法,利用Graphics对象进行绘制。 接下来,我们要关注的是交互性。360界面中的按钮通常有动态...

    自定义SeekBar,手势滑动条

    同时,这也是一个很好的实践案例,可以帮助开发者提升对Android UI组件自定义的理解和运用能力。 总的来说,自定义SeekBar是Android开发中提高用户体验和界面设计的重要手段。通过对SeekBar的扩展和改造,开发者...

    android 自定义view 含高级

    - **创建自定义View类**:继承自`View`或其子类(如`TextView`、`ImageView`等)。 - **重写关键方法**: - `onMeasure()`:用于测量View的大小。 - `onDraw(Canvas canvas)`:绘制View的主要内容。 - `...

    android 自定义控件与特效

    开发者需要继承`View`或`ViewGroup`类,并重写必要的方法,如`onDraw()`来绘制视图,`onMeasure()`和`onLayout()`来处理测量和布局。自定义View还可以包含触摸事件处理,如`onTouchEvent()`。同时,理解Android的...

    android 自定义控件实现demo收集 及 框架收集

    1. 继承已存在的View类(如Button、TextView等)或 ViewGroup 类,以便利用其基本功能。 2. 在onDraw()方法中重写绘图逻辑,绘制自定义的视图形状和内容。 3. 实现onMeasure()和onLayout()方法,确保控件的大小和...

    wpf 自定义 封装的控件

    - 创建自定义控件通常涉及以下几个步骤:定义类,继承自适当的基类(如`UserControl`或`Control`),添加属性、事件和方法,设计控件的外观(样式和模板)。 3. **模板和样式**: - `ControlTemplate`定义了控件...

    Android-Android自定义View实现水波纹效果

    1. 创建自定义View类:首先,我们需要创建一个新的View类,继承自View类,并重写onDraw()方法。在这个方法中,我们将进行实际的绘制工作。 2. 初始化Path对象:在自定义View的构造函数或onMeasure()方法中,初始化...

    iPhone之实现自定义进度条Progress

    2. **自定义视图(UIView)**: 要创建自定义进度条,首先我们需要创建一个继承自`UIView`的子类。在这个子类中,我们可以重写`draw(_ rect: CGRect)`方法来绘制进度条的形状、颜色和其他视觉效果。 3. **属性定义**...

    android 自定义view drawable

    例如,我们可以创建一个名为`CustomTextAndImgView`的类,它继承自`View`。 2. 在这个新的类中,我们需要重写`onDraw()`方法,这是绘制View的主要入口。在这个方法里,我们可以使用`Canvas`对象进行绘图,包括绘制...

    pixslider_QT自定义推子控件_skygog_源码

    1. **子类化QSlider**:为了自定义控件的行为和外观,我们通常会创建一个新的类,继承自QSlider,并重写其关键函数。比如,我们可以创建一个名为CustomSlider的类,这样就可以添加新的特性,如SetImage()接口。 2. ...

Global site tag (gtag.js) - Google Analytics