Java——抽象类

抽象类

抽象类的作用类似C++的模版,用来表征对某一个方面的问题分析抽象出的一个概念模型。其目的是让设计者依据抽象类的格式来修改并创造出新的类。但是抽象类不能直接创建对象,只能通过抽象类派生出子类,通过子类创建对象。


抽象类的定义

定义一个Shape抽象类,包含计算周长和面积的方法

//定义shape抽象类
public abstract Shape{
    public abstract double area();
    public abstract double perimeter();
}

由此可以看出,定义抽象类的一般格式如下:

访问权限 abstract class 类名{
    数据成员;

    //抽象方法
    访问权限 abstract 返回值类型 类方法 (参数1,参数2...);

    //一般方法
    访问权限 返回值类型 类方法 (参数1,参数2...){
        方法体
    };
}

抽象类的几点说明:

  1. 抽象类必须用abstract 修饰;
  2. 抽象类可以定义数据成员,一般方法和抽象方法。抽象方法只需要声明,不需要实现;
  3. 含有抽象方法的类必须声明为抽象类,抽象类的子类必须重写所有抽象方法后才能被实例化,否则这个子类也必须声明为抽象类;
  4. 抽象类不能被实例化,也就是不能用new关键字去创建对象。

抽象类的使用

定义抽象类的目的是提供给子类可共享的一般形式,子类可以根据自身需要扩展抽象类。

如下代码从抽象类Shape中派生子类Circle,并实现Shape类中的抽象方法:

//派生Shape子类Circle并实例化
public class Circle extends Shape {
    private double r;
    public Circle() {
        // TODO Auto-generated constructor stub
        r=0;
    }

    public Circle(double r) {
        super();
        this.r = r;
    }

    @Override
    public double area() {
        // TODO Auto-generated method stub
        return 3.14*this.r*this.r;
    }

    @Override
    public double perimeter() {
        // TODO Auto-generated method stub
        return 3.14*this.r*2;
    }

    public static void main(String[] args) {
        Shape c = new Circle(4);
        System.out.println("面积:"+c.area());
        System.out.println("周长:"+c.perimeter());
    }
}

执行结果如下:

面积:50.24
周长:25.12

当调用shape类型变量shape时,实际上调用了Circle类型对象的方法,这也是多态性的一种体现。

使用抽象类要注意

抽象类虽然具备类的形式,但由于其抽象性,不能定义抽象类的实例

//错误的示例
Shape shape = new Shape(3);

但可以定义一个抽象类的变量,让该变量引用其非抽象子类的对象间接实例一个抽象类:

//间接实例化抽象类
Shape shape;
shape = new Circle(5);
shape.area();
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值