hoge66的专栏

-----------------------看到专栏,偷着笑!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

java 基础(抽象类)

Posted on 2017-01-22 17:13  hehoge  阅读(209)  评论(0编辑  收藏  举报

     在某些情况下,父类只知道子类该实现什么样的方法,而不知道方法的具体实现,就可以定义抽象类,例如:父类shape,子类:circle;父类提供了计算周长的方法,但子类实现周长计算的方法是不一样的,比如,圆形,三角形;抽象类只提供方法签名,没有实现(由其子类实现)。

     类和方法都是由abstract修饰。

package com.creditharmony.adapter.testCase.test;

/*
 * 抽象类
 * */
public abstract class ShapeTest {
	{
		System.out.println("这是抽象类里的初始化块");
	}   
	
	private String color;
	// 计算周长的抽象方法
	public abstract double caperimagter();
	// 返回形状的抽象方法
	public abstract String getType();
	// 定义构造器,该构造器不是用来生成对象,而是用来被对象调用
	public ShapeTest(){};
	// 再来一个
	public  ShapeTest(String color) {
		System.out.println("执行形状的构造器……,color:"+color);
		this.setColor(color);
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
}

 三角形类:

package com.creditharmony.adapter.testCase.test;

public class TriangleShape extends ShapeTest {

	// 定义三角形的三条边
	private double a;
	private double b;
	private double c;

	@Override
	public double caperimagter() {

		return a + b + c;
	}

	@Override
	public String getType() {
		// 返回形状
		return "三角形";
	}

	public TriangleShape(String color, double a, double b, double c) {
		super(color);
		setSides(a, b, c);
	}

	private void setSides(double a, double b, double c) {
		if (a > b + c || b > a + c || c > a + b) {
			System.out.println("三角形的两边之和必大于第三边");
			return;
		}
		this.a = a;
		this.b = b;
		this.c = c;
	}

}

 圆形:

package com.creditharmony.adapter.testCase.test;

/*
 * 圆形
 * */
public class CircleShape extends ShapeTest {

	private double radius;

	public CircleShape(String color,double radius) {
		 super(color);
		 this.radius=radius;
	}

	@Override
	public double caperimagter() {
		// 周长
		return 2*Math.PI*radius;
	}

	@Override
	public String getType() {
		return getColor()+ "圆形";
	}

	public void setRadius(double radius) {
		this.radius = radius;
	}
	
	public static void main(String[] args) {
		ShapeTest s1=new TriangleShape("红色", 12.2, 12, 12);
		ShapeTest s2=new CircleShape("黄色", 5);
		System.out.println(s1.getType());
		System.out.println(s1.caperimagter());
		System.out.println(s2.getType());
		System.out.println(s2.caperimagter());
	}

}