Java中的抽象类和抽象方法

2022年3月15日21:38:30java评论125阅读模式

引言

Java中的抽象类和抽象方法
实例图片

如上图,二维图形类有三个子类,分别是正方形类三角形类圆形类文章源自随机的未知-https://sjdwz.com/11168.html

我们都知道要求正方形的面积,直接使用面积公式边长的平方即可,同理三角形的是底乘高除以2,圆的面积是**乘以半径的平方。那么二维图形的面积该怎么算呢?我们无法给出一个通用的方式。那么二维图形就不能计算面积了吗?不是的。只要是二维平面的图形,就可以计算面积,只是没有一个通用的公式而已。由此可见正方形,三角形,圆形的面积可以很具体的给出,但是二维图形不能,因为它很抽象**。文章源自随机的未知-https://sjdwz.com/11168.html

由此可得二维图形类的面积计算应该是抽象的,是抽象方法。文章源自随机的未知-https://sjdwz.com/11168.html

如果类中的某个方法,无法具体的给出,它就该是个抽象方法。文章源自随机的未知-https://sjdwz.com/11168.html

抽象方法的定义

Java中普通方法的定义方式是文章源自随机的未知-https://sjdwz.com/11168.html

访问权限 返回类型 方法名(有参数填写参数,没参数为空){

方法内部代码;

}

因为抽象方法我们无法给出具体的实现,所以抽象方法的定义与普通方法有所不同。定义方式如下:文章源自随机的未知-https://sjdwz.com/11168.html

访问权限 abstract 返回类型 方法名(有参数填写参数,没参数为空);

注意:因为不知如何实现,所以没有大括号了。文章源自随机的未知-https://sjdwz.com/11168.html

抽象方法的使用

抽象方法必须声明在抽象类中。文章源自随机的未知-https://sjdwz.com/11168.html

抽象类的定义方式如下:文章源自随机的未知-https://sjdwz.com/11168.html

访问权限 abstract class 类名{
    
}

子类在继承抽象类时,必须覆盖重写全部的抽象方法。(也叫实现方法)文章源自随机的未知-https://sjdwz.com/11168.html

我们可以写一下引言中的例子:文章源自随机的未知-https://sjdwz.com/11168.html

二维图形类定义如下:文章源自随机的未知-https://sjdwz.com/11168.html

package com.sjdwz;
/**
 * @Description 二维图形类,抽象类,有计算面积的抽象方法
 * @Date 2022/3/15
 * @Created by 随机的未知 sjdwz.com
 */
public abstract class Graphics2D {
    public abstract double getArea();
}

正方形类的定义如下:文章源自随机的未知-https://sjdwz.com/11168.html

package com.sjdwz;
/**
 * @Description 正方形类
 * @Date 2022/3/15
 * @Created by 随机的未知 sjdwz.com
 */
public class Square extends Graphics2D{
    //边长
    private int length = 6;
    //重写父类计算面积的方法
    @Override
    public double getArea() {
        return this.length * this.length;
    }
}

圆形类的定义如下:文章源自随机的未知-https://sjdwz.com/11168.html

package com.sjdwz;
/**
 * @Description 圆形类
 * @Date 2022/3/15
 * @Created by 随机的未知 sjdwz.com
 */
public class Circle extends Graphics2D{
    //半径长
    private int radius = 6;
    //重写父类计算面积的方法
    @Override
    public double getArea() {
        return 3.14 * this.radius * this.radius;
    }
}

测试类的定义如下:文章源自随机的未知-https://sjdwz.com/11168.html

package com.sjdwz;
/**
 * @Description 测试类
 * @Date 2022/3/15
 * @Created by 随机的未知 sjdwz.com
 */
public class Test {
    public static void main(String[] args) {
        Square square = new Square();
        Triangle triangle = new Triangle();
        Circle circle = new Circle();
        System.out.println("正方形的面积时"+square.getArea());
        System.out.println("三角形的面积时"+triangle.getArea());
        System.out.println("圆形的面积时"+circle.getArea());
    }
}

注意事项

关于抽象类和抽象方法有如下注意事项:文章源自随机的未知-https://sjdwz.com/11168.html

  1. 抽象类不能创建对象
    抽象类的对象,调用该抽象对象抽象方法,但是抽象方法没有具体实现,调用起来没有任何意义;
  2. 抽象类中可以有构造方法,可供子类创建对象时,初始化父类成员使用
    子类的构造方法之中,是有默认的super()方法的,所以需要访问父类的构造方法,那么父类的构造方法需要存在;
  3. 抽象类中,并不一定要包含抽象方法,但是抽象方法所在的类必须时抽象类
    没有包含抽象方法的抽象类,目的是不想让调用者创建该对象,通常用于某些特殊的类结构设计;
  4. 抽象类的子类,必须重写抽象父类的所有抽象方法,除非子类也是抽象类
    如果子类不重写所有抽象方法,那么子类中还包含抽象方法,还应该是抽象类。

欢迎关注

欢迎关注我的微信公众号随机的未知文章源自随机的未知-https://sjdwz.com/11168.html

Java中的抽象类和抽象方法
微信公众号:随机的未知
文章源自随机的未知-https://sjdwz.com/11168.html
欢迎关注本站微信公众号:随机的未知 如果喜欢本文,欢迎点赞,收藏,转发,打赏。
  • 本文由 发表于 2022年3月15日21:38:30
  • 转载请注明:来源:随机的未知 本文链接https://sjdwz.com/11168.html
教程

详解MySQL索引

索引介绍 索引是帮助MySQL高效获取数据的数据结构。在数据之外,数据库系统还维护着一个用来查找数据的数据结构,这些数据结构指向着特定的数据,可以实现高级的查找算法。 本文以MySQL常用的B+Tre...
java

详解java接口interface

引言 接口这个词在生活中我们并不陌生。 在中国大陆,我们可以将自己的家用电器的插头插到符合它插口的插座上; 我们在戴尔,惠普,联想,苹果等品牌电脑之间传输数据时,可以使用U盘进行传输。 插座的普适性是...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定