Java学习历程之----提升篇(六)

科普

知识

前言

     前面我们学习了Java语言的三大特性----继承,封装和多态,在前面的Java学习历程之----进阶篇(一)中我们学习到,在面向对象中,类和对象是最基本、最重要的组成单元。所有的对象都是通过类来描绘的,即类是对象的抽象,对象是类的具体,比如学生是一个类,具体到张三同学就是一个对象。Java 语言提供了两种类,分别为具体类和抽象类。前面学习接触的类都是具体类。这一节我们来介绍一下抽象类。

一、Java 抽象类

   在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,那么这样的类称为抽象类(abstract)。

在Java中抽象类的语法格式如下:

<abstract>class<class_name> {

    <abstract><type><method_name>(parameter-iist);

}

其中,abstract 表示该类或该方法是抽象的;class_name 表示抽象类的名称;method_name 表示抽象方法名称,parameter-list 表示方法参数列表。

二、抽象类的特征

     如果一个方法使用 abstract 来修饰,则说明该方法是抽象方法,抽象方法只有声明没有实现。需要注意的是 abstract 关键字只能用于普通方法,不能用于 static 方法或者构造方法中。

抽象方法的 3 个特征如下:

  •     抽象方法没有方法体

  •     抽象方法必须存在于抽象类中

  •     子类重写父类时,必须重写父类所有的抽象方法

     在使用 abstract 关键字修饰抽象方法时不能使用 private 修饰,因为抽象方法必须被子类重写,而如果使用了 private 声明,则子类是无法重写的。(访问权限可参考Java学习历程之----进阶篇(四)

三、抽象类的使用规则

抽象类的定义和使用规则如下:

  • 抽象类和抽象方法都要使用 abstract 关键字声明。

  • 如果一个方法被声明为抽象的,那么这个类也必须声明为抽象的。而一个抽象类中,可以有 0~n 个抽象方法,以及 0~n 个具体方法。

  • 抽象类不能实例化,也就是不能使用 new 关键字创建对象。

四、实战

接下来我们通过实操进一步了解抽象类

1)首先创建一个表示图形的抽象类 Shape,代码如下所示。

package code.tisheng6;


public abstract class Diagram {//定义一个抽象类Diagram
    public int width; // 几何图形的长
    public int height; // 几何图形的宽
    public double radius;//定义半径


    public Diagram(int width, int height) {//构造方法为width和height赋值
        this.width = width;
        this.height = height;
    }
    public  Diagram(double radius){//构造方法为radius赋值
        this.radius = radius;
    }
    public abstract double area(); // 定义抽象方法,计算面积
    public abstract double perimeter();//定义抽象方法计算周长
}


2)定义一个长方形类,该类继承自形状类 Diagram,并重写了 area( ) 和Perimeter()抽象方法, 子类重写父类时,必须重写父类所有的抽象方法。长方形类的代码如下:

package code.tisheng6;


public class Rectangle extends Diagram {
    public Rectangle(int width, int height) {
        super(width, height);
    }
    // 重写父类中所有的抽象方法,实现计算长方形面积和周长的功能,注意,抽象类的所有抽象方法都必须被子类重写!!!
    @Override
    public double area() {
        return width * height;
    }
    public double perimeter(){
        return 2*(width+height);
    }
}


3)定义一个圆形类,该类与长方形类一样,需要继承形状类Diagram,并重写父类中的 area()和perimeter()抽象方法。圆形类的代码实现如下:

package code.tisheng6;


public class Circle extends Diagram{
    public Circle(float radius) {
        super(radius);
    }
    // 重写父类中的抽象方法,实现计算圆形面积和周长的功能
    @Override
    public double area() {
        return Math.PI*radius*radius;
    }
    public double perimeter() {
        return 2*Math.PI*radius;
    }


}

4)最后创建一个测试类,分别创建长方形类和圆形类的对象,并调用各类中的 area() 和perimeter()方法,打印出不同形状的几何图形的面积和周长。测试类的代码如下:

package code.tisheng6;


public class Test {
    public static void main(String[] args) {
        Rectangle rectangle = new Rectangle(5, 4); // 创建长方形类对象
        System.out.println("长方形的面积为:" + rectangle.area());
        System.out.println("长方形的周长为:" + rectangle.perimeter());
        Circle circle = new Circle( 5); // 创建圆形类对象
        System.out.println("圆形的面积为:"+String.format("%.2f", circle.area()));
        System.out.println("圆形的周长为:"+String.format("%.2f", circle.perimeter()));
    }
}


运行结果及截图如下所示:

END

结语

     疫情在渐渐好转,生活正慢慢回归正轨,落下的任务终归是要还的,继续加油吧!另外,我们现在练习的这些题目都是比较简单的,大家学有余力的条件下可以多找难题练习,编程在于实践!上周习题参考答案如下:

1.方法的重载

2.方法的重写

3.多态

编辑:玥怡居士|审核:世外居士

往期精彩回顾

Java学习历程之----提升篇(五)

Java学习历程之----提升篇(四)

Java学习历程之----提升篇(三)

扫码立即关注我们

IT进阶之旅

我就知道你“在看”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值