/*
* 抽象方法和抽象类
* ——抽象方法和抽象类必须使用abstract ,有抽象方法的类只能被定义为抽象类 ,
* 抽象类里可以没有抽象方法
* 抽象方法里不能有方法体
* 抽象类不能被实例化,无法使用 new 关键字来调用抽象类的构造器创建抽象类的实例
* —— 即使抽象类里不包含抽象方法没这个抽象类也不能创建实例
*/
public abstract class Shape {
{
System.out.println("执行Shap的初始化块...");
}
private String color;
//定义一个计算周长的抽象方法
public abstract double calPerimeter();
//定义一个返回星转的抽象方法
public abstract String getType();
//定义Shap的构造器,该构造器并不是用于创建Shape对象
//而是用于被子类调用
public Shape(){};
public Shape(String color)
{
System.out.println("执行Shape的构造器...");
this.color=color;
}
//color 属性的setter和getter方法
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
public class Triangle extends Shape {
//定义三角形的三个边
private double a;
private double b;
private double c;
//构造器
public Triangle(String color,double a,double b,double c)
{
super(color);
this.setSides(a, b, c);
}
//设置三条边
public 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;
}
//重写Shape 类的计算周长的抽象方法
@Override
public double calPerimeter() {
// TODO Auto-generated method stub
return a+b+c;
}
//重写Shape类的返回星转的抽象方法
@Override
public String getType() {
// TODO Auto-generated method stub
return "三角形";
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Triangle tri=new Triangle("red", 3, 4, 5);
System.out.println("周长:"+tri.calPerimeter());
System.out.println("Color:"+tri.getColor());
System.out.println("Type:"+tri.getType());
}
}