当前位置: 首页 > news >正文

Java抽象类的案例

抽象类的特点总结

  1. 不能实例化:抽象类不能直接创建实例。它只能被继承。即,你不能用 new 关键字创建抽象类的对象。

  2. 可以包含抽象方法:抽象类可以包含一个或多个抽象方法(没有方法体),这些方法必须在子类中实现。抽象方法的定义是 abstract 关键字修饰的。

  3. 可以包含普通方法:除了抽象方法,抽象类还可以包含已实现的方法,即普通方法。这些方法可以被子类继承和使用,或者被重写(覆盖)。

  4. 可以有构造函数:抽象类可以有构造函数,构造函数通常在子类实例化时被调用,用于初始化抽象类的一些状态。

  5. 可以包含字段:抽象类可以有字段(成员变量),并且这些字段可以被子类继承和访问。

  6. 可以实现接口:抽象类可以实现一个或多个接口,但它不需要实现接口中的所有方法,子类需要提供具体的实现。

  7. 可以有访问修饰符:抽象类可以具有访问修饰符(如 public, protected, private),这决定了它的访问级别和子类访问的权限。

抽象类主要用于设计一个类的基础结构,并允许子类实现具体的细节。这种设计模式常用于模板方法模式、工厂模式等场景中。

1. 基本的抽象类示例
abstract class Animal {// 抽象方法,没有实现abstract void makeSound();// 普通方法,有实现void eat() {System.out.println("This animal is eating.");}
}class Dog extends Animal {@Overridevoid makeSound() {System.out.println("Bark");}
}class Cat extends Animal {@Overridevoid makeSound() {System.out.println("Meow");}
}public class Main {public static void main(String[] args) {Animal myDog = new Dog();myDog.makeSound(); // Output: BarkmyDog.eat();       // Output: This animal is eating.Animal myCat = new Cat();myCat.makeSound(); // Output: MeowmyCat.eat();       // Output: This animal is eating.}
}
abstract class Beverage {// 模板方法final void prepareRecipe() {boilWater();brew();pourInCup();addCondiments();}// 具体的步骤private void boilWater() {System.out.println("Boiling water");}private void pourInCup() {System.out.println("Pouring into cup");}// 抽象方法,由子类实现abstract void brew();abstract void addCondiments();
}class Tea extends Beverage {@Overridevoid brew() {System.out.println("Steeping the tea");}@Overridevoid addCondiments() {System.out.println("Adding lemon");}
}class Coffee extends Beverage {@Overridevoid brew() {System.out.println("Dripping coffee through filter");}@Overridevoid addCondiments() {System.out.println("Adding sugar and milk");}
}public class Main {public static void main(String[] args) {Beverage tea = new Tea();tea.prepareRecipe();Beverage coffee = new Coffee();coffee.prepareRecipe();}
}

http://www.lryc.cn/news/440431.html

相关文章:

  • 运维工程师面试整理-数据库
  • comfyui一键抠图工作流:让你告别PS!
  • 【Hot100】LeetCode—4. 寻找两个正序数组的中位数
  • 【LLM text2sql】浅看大模型用于text2sql的综述
  • Node js介绍
  • 企业编辑抖音百科词条有什么用?
  • 数据结构-链式二叉树-四种遍历
  • 【YashanDB知识库】数据库获取时间和服务器时间不一致
  • 十大排序之:冒泡排序
  • 【MPC】无人机模型预测控制复现Data-Driven MPC for Quadrotors项目(Part 1)
  • 微信小程序开发——比较两个数字大小
  • Java多线程3
  • node+Vue项目环境创建
  • 云智AI人工智能平台——与众不同之处
  • 国庆节有什么好物值得入手?精选国庆节必选好物合集
  • 并发安全与锁
  • 细胞分裂检测系统源码分享
  • openssl 生成多域名 多IP 的数字证书
  • 电影评论|基于springBoot的电影评论网站设计与实现(附项目源码+论文+数据库)
  • 【C++】虚函数
  • esxi虚拟机启用cbt备份(增量备份)
  • mysql 8.0 时间维度表生成(可运行)
  • 打造高效实时数仓,从Hive到OceanBase的经验分享
  • 15.3 JDBC数据库编程
  • SSH公私钥后门从入门到应急响应
  • 服务器数据恢复—Linux操作系统环境下网站数据的恢复案例
  • 开放式耳机是怎么样的?开放式耳机的优缺点分析?
  • HDMI色块移动——FPGA学习笔记13
  • MySQL中去除重复
  • 【C++】vector容器的基本使用