在某些情况下,父类只知道子类该实现什么样的方法,而不知道方法的具体实现,就可以定义抽象类,例如:父类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());
}
}
浙公网安备 33010602011771号