Java面向对象之abstract抽象类
2022/1/14 12:03:27
本文主要是介绍Java面向对象之abstract抽象类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- (1)基本概念
- (2)注意事项
- (3)实际意义
- (4)案例
- (5)运行结果
提示:以下是本篇文章正文内容,Java系列学习将会持续更新
(1)基本概念
抽象类:普通类的超集,只是比普通类多一些抽象方法。使用abstract关键字修饰的类,抽象类不能实例化对象。
public abstract class TestAbstract {} TestAbstract t = new TestAbstract(); (X)不能实例化对象
抽象方法:指不能被具体实现的方法,也就是不能有方法体{},并且使用abstract关键字修饰;
访问修饰符 abstract void show();
回到目录…
(2)注意事项
1.抽象类中可以有成员变量、成员方法以及构造方法;
2.抽象类中可以有抽象方法也可以没有;但是拥有抽象方法的类一定是抽象类,必须有abstract关键字修饰;
3.抽象类的子类可以是普通类(子类必须覆写父类的所有抽象方法),也可以是抽象类。
4.一个子类只能继承一个抽象类。
回到目录…
(3)实际意义
抽象类的意义不在于实例化对象而在于被继承。若一个类继承自抽象类,则必须重写抽象方法。否则该类也得变成抽象类。保证多态的正确运行。
因此,抽象类对子类具有强制性和规范性,叫做模板设计模式。
经验分享:
在以后的开发中推荐使用父类引用指向子类的对象形式,因为父类引用直接调用的方法一定是父类拥有的方法。当需要更换指向子类对象的时候,只需要将new后面的类型更改一下就可以了,其他的代码无需改动,因此提高了代码的可维护性和可扩展性。
该方式的缺点在于:父类引用不能直接调用子类独有的方法,若调用则需要强制类型转换。
回到目录…
(4)案例
①自定义CaffeineDrinks抽象类,包含制作饮品的大方法、每个流程的小方法/抽象方法。
②自定义Coffee、Tea、MilkTea类继承CaffeineDrinks类,实现对父类中抽象方法的重写。
③自定义TestCaffeineDrinks类,在main()方法中使用多态的语法创建对象进行测试。
CaffeineDrinks父类
/** * 抽象类:咖啡因饮品 */ public abstract class CaffeineDrinks { // 制作流程是标准化的,封装到父类中 // 子类只有使用权不能修改 // 饮品的制作流程,用final修饰,表示不能被覆写 public final void prepareDrinks() { //烧水 boilWater(); //冲泡 brew(); //倒入杯中 pourInCup(); if(isCustomerWantsCondiments()) { //添加调味料 addCondiments(); } } // 对于浸泡和加调味品来说,不同子类实现细节不同,延迟到子类中去具体实现 /** 抽象方法 **/ //冲泡的方式不同 public abstract void brew(); //添加的调味料不同 public abstract void addCondiments(); //烧水 public void boilWater() { System.out.println("boiling water"); } //倒入杯中 public void pourInCup() { System.out.println("pouring into cup"); } //顾客是否添加调味料,默认添加 public boolean isCustomerWantsCondiments() { return true; } }
Coffee子类
/** * 星巴克咖啡制作 */ import java.util.Scanner; public class Coffee extends CaffeineDrinks { Scanner input = new Scanner(System.in); //重写抽象类中的冲泡方法 @Override public void brew() { System.out.println("brew coffee bag"); } //重写抽象类中的调料方法 @Override public void addCondiments() { System.out.println("add sugar and milk"); } //重写抽象类中的是否调料方法 @Override public boolean isCustomerWantsCondiments() { System.out.print("您的咖啡是否加糖和奶? y表示加,n表示不加 :"); String str = input.nextLine(); if (str.equals("y")) { return true; } return false; } }
MilkTea子类
/** * 奶茶制作 */ public class MilkTea extends CaffeineDrinks { //重写抽象类中的冲泡方法 @Override public void brew() { System.out.println("brew tea and coffee bag"); } //重写抽象类中的调料方法 @Override public void addCondiments() { System.out.println("add milk and sugar"); } }
Tea子类
/** * 星巴克泡茶法 */ public class Tea extends CaffeineDrinks { //重写抽象类中的冲泡方法 @Override public void brew() { System.out.println("steep tea bag"); } //重写抽象类中的调料方法 @Override public void addCondiments() { System.out.println("add lemon"); } }
TestCaffeineDrinks测试类
/** * 抽象方法的测试类 */ public class TestCaffeineDrinks { public static void main(String[] args) { //咖啡的制作 CaffeineDrinks coffee = new Coffee(); System.out.println("咖啡的制作:"); coffee.prepareDrinks(); System.out.println("--------------"); //茶的制作 CaffeineDrinks tea = new Tea(); System.out.println("茶的制作:"); tea.prepareDrinks(); System.out.println("--------------"); //奶茶的制作 CaffeineDrinks milkTea = new MilkTea(); System.out.println("奶茶的制作:"); milkTea.prepareDrinks(); } }
回到目录…
(5)运行结果
回到目录…
总结:
提示:这里对文章进行总结:
以上就是今天的学习内容,本文是继续Java面向对象的学习,学习抽象方法、抽象类。之后的学习内容将持续更新!!!
这篇关于Java面向对象之abstract抽象类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API