抽象类
编写一个类时,为该类定义一 些方法,这些方法用于描述该类的行为方式,这些方法都有具体的方法体,但在某出情兄下,某个父类仅知道其子类应该包含哪些方法,却无法准确地知道子类实现这些方法的细节。如定义一个原形类(Shape)作为诸如三角形、菱形以及矩形等图形的父类,在该父类中定义calcPerimeter(方法,该方法用于计算图形的周长,但不同的子类图形计算周长的方式大相径庭,所以导致Shape类的calcPerimeter()方法无法运用某个固定的计算图形周长的公式来计算其子类的周长。
在Java中,可以将calcPerimeter()方法定义为抽象方法,抽象方法没有具体的方法实现,该方法必须由其继承的子类重写,这样该方法就起到了约束规范的作用,又不影响类最初的设计思路。
抽象方法和抽象类
抽象类是专门设计用来让子类继承,抽象方法必须被子类重写。
在JVa语言中,使用absrat关键字修饰一个类时, 该类就是抽象类,使用asrct关键字修饰一个方法时这方法即为抽象方法。
抽象类和抽象方法的规则如下:
(1)一个抽象类中可以不定义抽象方法,但是只要类中有一个抽象方法,则该类一定是抽象类。(2)抽象类不能被实例化,即不能被new创建一一个实例对象。
(3)防象二个学类魏承个抽象类, 则子类需要道过覆盖的方式来重写该抽象类中的所有的象方法。 如果子类没有完全重写抽象父类中所有的抽象方法,则子类仍是抽象的。
(4)抽象方法可以与public、protected复合使用,但不能与inal, pivato和statc复合使用。
使用抽象类和抽象方法的具体操作详见示例
(1)创建圆形的抽象父类Shape
public abstract class Shapo (
private String color;
public abstract doublo calcPorimetor();
//定一个返回图形子类型的方法
public abstract String gotTypo(),
public ShapeString color){
this, color=color;
System. out printn('---执行了Shape类的构造方法 --),
}
public String getColor();{
return color;
}
public void setColor(String color){
this. color = color;
}
}
(2)创建三角形类(Triangle)该类继承Shape类
public class Triangle extends Shape{
//定义三角形边
private double х;
private double y;
private double Z;
//定义有参构造方法
public Triangle(String color,double, double y,double z) {
super(color);//调用父类构造器
this. setSide(x, y, z);
}
//设置三角形三边
public void setSide(double х, double y,double z)(
if(x>y+z || y>x+Z || z>x+y){
System.out. printn('三角形两边之和必须大于第三边");
return;
}
this.x=x;
this.y=y;
this.z=z;
}
//重写父类计算周长的方法
public double calPerieter(){
return x+y+z;
//重写父类获取图形类型方法
public StringgetType(){
return "三角形";
}
}
(3)创建圆形类(Cirele),该类继承Shape类,代码如下:
public class Circle extends Shape {
private double r;//半径
public Circle(String color,double r) {
super(color);
this.r=r;
}
//重写父类计算周长的方法
public double calcPerimeter() {
return 2*Math.PI*r;
}
//重写父类获取图形类型的方法
public String getType() {
return "圆形";
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
public static void main(Stringll args) {
Shape triangle=new Triangle(" 红色", 3, 4, 5);
Shape circle=new Circle(" 红色", 4);
System. out. println(triangle. getType()+" 周长 ="+triangle .calcPerimeter());
System.out. println(circle .getType()+" 周长 =" +circle .calcPerimeter());
}
}