java中抽象类和抽象方法

简介: java中抽象类和抽象方法

前言

       苹果这个具体的水果,它具有的属性为,红色;它具有的方法为,被啃。那么,水果,这个定义,不知阁下又该如何应对?很明显,这是一个抽象的概念,是苹果、香蕉、桃子......的集合,而水果具备的方法,被吃,又该如何描述?是像苹果一样直接啃,核扔掉?还是像香蕉一样拨开皮,吃掉里面的果肉?在java中,可以将苹果视为一个类,水果这种抽象的概念即为抽象类;苹果这个类中,方法,被啃,可以具体执行。水果这个抽象类,方法,被吃,无法具体执行,怎么吃?啃?剥皮?切开?被吃,这个抽象类中的方法即为抽象方法。

一、抽象类和抽象方法是什么?

1.抽象类

      抽象类:如颜色,名字,动物,食物等一类事物的总称,不具体的概念,皆可创建为抽象类

               abstract 关键字 将普通类转换为抽象类

              语法:public abstract class 抽象类名{}

package projectMy;
public abstract class Animal{
    //创建了一个抽象类 Animal类
    //some codes
}

2.抽象方法

       抽象方法:例如繁衍,描述形状,计算面积等一类行为的总称,不具体的行为,皆可创建为抽象方法

              abstract 关键字 将成员方法转换为抽象方法

               语法:abstract void 方法名();

package projectMy;
public abstract class Animal {
  abstract void breed();
    //创建了抽象方法 breed()方法
}

二、使用方法

1.实操展示

       代码构架:

       (1)创建抽象类 Animal类,创建breed(),feed(),move()抽象方法以及name()方法

package projectMy;
public abstract class Animal {
  abstract void breed();
    //繁衍方法
  abstract void feed();
    //获食方法
  abstract void move();
  //移动方法
  String name() {
    return "类别:动物界";
  }
}

(2)创建抽象类 Bird类,继承 Animal抽象类,实现breed(),move()方法,补充name()方法

package projectMy;
public abstract class Bird extends Animal{
  void breed() {
        //覆写实现了父类的breed()抽象方法
    System.out.println("繁殖方式:卵生");
  }
  void move() {
        //覆写实现了父类的move()抽象方法
    System.out.println("移动方式:飞翔");
  }
  abstract void feed();   
  //不写父类的抽象方法也不会报错,写了是方便记忆,防止遗忘了这个方法
  String name() {
        //补充父类的name()方法
    return super.name()+"鸟类";
  }
}

  (3)创建 Eagle 类,继承 Bird抽象类,实现feed()方法,补充name()方法,创建main方法

package projectMy;
public class Eagle extends Bird{
  void feed() {
        //覆写了父类的feed()抽象方法
    System.out.println("获食方法:捕猎");
  }
  String name(){
        //补充了父类的name()方法
    return super.name()+"鹰形目鹰科";
  }
  public static void main(String[] args) {
    Eagle eagle = new Eagle();
    //调用父类覆写的方法,和本类实现父类后的方法
    System.out.println("鹰");
    System.out.println(eagle.name());
    eagle.breed();
    eagle.feed();
    eagle.move();
  }
}

输出结果:

       (4)创建 Dove类,继承 Bird抽象类,实现feed()方法,补充name()方法,创建main方法

package projectMy;
public class Dove extends Bird{
  void feed() {
        //覆写了父类的feed()抽象方法
    System.out.println("获食方法:采集");
  }
  String name() {
        //补充了父类的name()方法
    return super.name()+"鸽形目鸠鸽科";
  }
  public static void main(String[] args) {
    Dove dove = new Dove();
    //调用父类覆写的方法,和本类实现父类后的方法
    System.out.println("鸽子");
    System.out.println(dove.name());
    dove.breed();
    dove.feed();
    dove.move();
  }
}

     输出结果:

        总结:

       创建了两个抽象类

               Animal类,动物类,创建了抽象方法,繁衍,获食,移动,三个抽象行为

               Bird类,鸟类,继承了Animal类,将繁衍,移动,两个父类的抽象方法,具体为了鸟类的行为,即“产卵”,  “飞翔”。抽象方法,获食,仍需具体为什么鸟,才能覆写为具体获食行为。

       创建了两个都继承了Bird抽象类的类

               Eagle类,鹰类,将“获食”这一抽象行为,具体为了“捕猎”

               Dove类,鸽子类,将“获食”这一抽象行为,具体为了“采集”

        结论:      

               抽象类和抽象方法,可以实现“物品分类”的效果,例如生物分类学中的“界、门、纲、目、科、属、种”,在“界”这一类创建基本的符合生物的抽象方法,逐级根据需要增加抽象方法。所有的抽象方法,只要到了可以实现为具体行为的某一子类中,该子类即可将其实现,从而到最后一级“种”时,每个物种的信息都完整地显示出来。

               1.有利于简化代码,防止重复造车轮

               2.有利于清晰框架,防止代码逻辑混乱

2.注意事项

       抽象类:

               抽象类本身不能实例化创建本类的对象,必须通过子类向上转型

                       语法:抽象类名 对象 = new 子类();

Bird bird1 = new Eagle();
//Eagle类向上转型,赋值给了抽象类的对象 bird1,相当于创建了Bird抽象类对象

   抽象方法:

                (1)创建抽象方法时,不需要实现,没有“{}”

abstract void feed();

(2)抽象方法只能在抽象类中被创建成员方法在抽象类和普通类中都可被创建

                (3)子类继承了一个抽象父类子类必须实现这个父类中没有被实现的所有抽象方法

                (4)抽象子类继承了抽象父类,不必实现父类的抽象方法但建议写上没有实现的抽象方法,避免在下一个继承中,遗忘了父类的某个抽象方法

                (5)抽象父类的抽象方法,只要被一个子类/抽象子类实现,后续继承的子类便不用再次重写该抽象方法

总结

       以上就是java中的抽象类和抽象方法,简单介绍了抽象类和抽象方法的使用,更多的用处,需要在实际项目中操作才知道,如果对“接口”这个概念不太熟悉,up会在下篇文章中帮你了解一下。

相关文章
|
3月前
|
前端开发 JavaScript Java
Java 开发中 Swing 界面嵌入浏览器实现方法详解
摘要:Java中嵌入浏览器可通过多种技术实现:1) JCEF框架利用Chromium内核,适合复杂网页;2) JEditorPane组件支持简单HTML显示,但功能有限;3) DJNativeSwing-SWT可内嵌浏览器,需特定内核支持;4) JavaFX WebView结合Swing可完美支持现代网页技术。每种方案各有特点,开发者需根据项目需求选择合适方法,如JCEF适合高性能要求,JEditorPane适合简单展示。(149字)
302 1
|
2月前
|
算法 Java 开发者
Java 项目实战数字华容道与石头迷阵游戏开发详解及实战方法
本文介绍了使用Java实现数字华容道和石头迷阵游戏的技术方案与应用实例,涵盖GUI界面设计、二维数组操作、游戏逻辑控制及自动解法算法(如A*),适合Java开发者学习游戏开发技巧。
192 46
|
3月前
|
Java 索引
Java ArrayList中的常见删除操作及方法详解。
通过这些方法,Java `ArrayList` 提供了灵活而强大的操作来处理元素的移除,这些方法能够满足不同场景下的需求。
381 30
|
3月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
129 1
|
3月前
|
安全 Java API
Java 集合高级应用与实战技巧之高效运用方法及实战案例解析
本课程深入讲解Java集合的高级应用与实战技巧,涵盖Stream API、并行处理、Optional类、现代化Map操作、不可变集合、异步处理及高级排序等核心内容,结合丰富示例,助你掌握Java集合的高效运用,提升代码质量与开发效率。
203 0
|
3月前
|
算法 搜索推荐 Java
Java中的Collections.shuffle()方法及示例
`Collections.shuffle()` 是 Java 中用于随机打乱列表顺序的方法,基于 Fisher-Yates 算法实现,支持原地修改。可选传入自定义 `Random` 对象以实现结果可重复,适用于抽奖、游戏、随机抽样等场景。
121 0
|
3月前
|
安全 Java
JAVA:Collections类的shuffle()方法
`Collections.shuffle()` 是 Java 中用于随机打乱列表顺序的工具方法,适用于洗牌、抽奖等场景。该方法直接修改原列表,支持自定义随机数生成器以实现可重现的打乱顺序。使用时需注意其原地修改特性及非线程安全性。
130 0
|
3月前
|
算法 安全 Java
java中Collections.shuffle方法的功能说明
`Collections.shuffle()` 是 Java 中用于随机打乱列表顺序的方法,基于 Fisher-Yates 算法实现,常用于洗牌、抽奖等场景。可选 `Random` 参数支持固定种子以实现可重复的随机顺序。方法直接修改原列表,无返回值。
120 0
|
3月前
|
Java 程序员 项目管理
Java 程序员不容错过的 Git Flow 全套学习资料及应用方法详解 Git Flow
本文详细介绍了Git Flow技术方案及其在Java项目中的应用实例,涵盖分支管理、版本发布与紧急修复流程,帮助开发者掌握高效的代码管理方法,提升团队协作效率。附示例操作及代码下载链接。
81 0
|
4月前
|
缓存 Java 数据库
Java 访问修饰符使用方法与组件封装方法详细说明
本文详细介绍了Java中访问修饰符(`public`、`private`、`protected`、默认)的使用方法,并结合代码示例讲解了组件封装的核心思想与实现技巧。内容涵盖数据封装、继承扩展、模块化设计与接口隔离等关键技术点,帮助开发者提升代码的可维护性与安全性,适用于Java初学者及进阶开发者学习参考。
99 1