欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

【Java】6.5 抽象类

发布时间:2025/3/20 java 26 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【Java】6.5 抽象类 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

抽象类和抽象方法

为什么要使用抽象类


抽象类和抽象方法

抽象类:使用abstract修饰的类就是抽象类。总结起来,抽象类的特性就是有得有失:

  • 得:就是可以设置抽象方法
  • 失:就是不能创建实例
  • 其他的普通类可以有的抽象类也可以有

抽象类的注意点

  • 虽然抽象类不能创建实例,但他依然有构造器,它的构造器主要是供其子类构造器调用的
  • 抽象类自己完全没有抽象方法
  • 抽象类总是不能创建实例的 —— 即使它没有包含任何抽象方法
  • 抽象方法:使用abstract修饰且没有方法体(即没有花括号的方法)

    抽象方法的注意点

  • 抽象方法没有方法体
  • 只要在方法后出现花括号,即使花括号中没有任何代码,那也是方法体
  • abstract不能与final同时出现:
  • 对于abstract方法而言,该方法需要子类去重写该方法,final不允许被重写,因此不能同时出现
  • 对于abstract类而言,该类是希望有子类去继承它的,final修饰的类是不允许被继承的
  • abstract与static不能同时修饰方法(见注释1
  • abstract和private不能同时修饰方法,因为abstract修饰的方法希望被子类重写,而private修饰的方法子类是无法获取的
  • 为什么要使用抽象类

    主要和“模板模式”结合在一起

    需求场景:程序需要实现A方法,但是A方法又需要调用B方法。但此时,B方法暂时不知道如何实现(不同的子类对B方法的实现【是不同】)。此时就是需要把B方法定义成抽象方法。

    Volume.java

    //定义一个抽象类 public abstract class Volume {public Volume() {}// 定义一个抽象的实现求体积的方法public abstract double getVolume(); }

    Cube.java 

    public class Cube extends Volume {// 定义成员变量,正方体的边长private double edge;// 定义一个无参数的构造器,一个有参数构造器public Cube() {}public Cube(double edge) {this.edge = edge;}// 因为成员变量时private修饰,所以需要setter和getter方法获取相关数据public double getEdge() {return edge;}public void setEdge(double edge) {this.edge = edge;}// 重写getVolume方法@Overridepublic double getVolume() {return edge * edge * edge;}}

    Cylinder.java

    public class Cylinder extends Volume {// 定义成员变量,圆柱体的底面半径和高private double radius;private double height;// 创建两个构造器,一个无参数构造器,一个有参数构造器public Cylinder() {}public Cylinder(double radius, double height) {this.radius = radius;this.height = height;}/// 因为成员变量时private修饰,所以需要setter和getter方法获取相关数据public void setRadius(double radius) {this.radius = radius;}public double getRadius() {return radius;}public void setHeight(double height) {this.height = height;}public double getHeight() {return height;}// 重写getVolume方法@Overridepublic double getVolume() {return Math.PI * radius * radius * height;} }

    AbstractTest.java

    public class AbstractTest {public static void main(String[] args) {// 多态,向上转型Volume cylinder = new Cylinder(3.14, 5.56);Volume cube = new Cube(5.6);System.out.println("圆柱体的体积:" + cylinder.getVolume());System.out.println("正方体的体积:" + cube.getVolume());} }

    【注释1】当static修饰方法的时候,说明这个方法属于类本身。调用这个方法时,可以直接通过类调用。当使用abstract修饰该方法时,该方法是没有方法体的。此时,若通过类调用该方法,就会出现错误(调用没有方法的方法体)

    总结

    以上是生活随笔为你收集整理的【Java】6.5 抽象类的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。