Java面向对象(抽象类)

抽象类

编写一个类时,为该类定义一 些方法,这些方法用于描述该类的行为方式,这些方法都有具体的方法体,但在某出情兄下,某个父类仅知道其子类应该包含哪些方法,却无法准确地知道子类实现这些方法的细节。如定义一个原形类(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());
    }
   } 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值