java学习笔记16-抽象类
抽象类:
定义了一系列的属性和方法的类。抽象方法是不能直接实现功能。需要通过继承去实现具体方法。为了将静态的业务流程跟动态的实现分开。
工厂生产产品时,都需要准备材料,执行组装,产品销售等流程。但是对于不同的工厂。在执行这些流程是不同的。比如不同的工厂需要准备的材料不同。
创建抽象类的关键字是abstract
public abstract class Factory {
public abstract void prepared_matrial();
public abstract void do_make();
public abstract void sale();
}
使用abstract的方法是抽象方法,没有看上去比较怪,没有用花括号括起来。这样去声明方法表示。这个方法不能马上实现。需要通过子类去实现。
创建两个子类来继承它,首先创建一个汽车工厂,取名CarFactory
public class CarFactory extends Factory{
@Override
public void prepared_matrial(){
System.out.println("准备轮胎,方向盘");
}
@Override
public void do_make() {
System.out.println("组装汽车");
}
@Override
public void sale() {
System.out.println("去4S店");
}
}
再创建一个食品工厂,取名FoodFactory
public class FoodFactory extends Factory {
@Override
public void prepared_matrial() {
System.out.println("准备萝卜丝");
}
@Override
public void do_make() {
System.out.println("把萝卜丝做成一袋袋的");
}
@Override
public void sale() {
System.out.println("去小卖部");
}
}
如果继承后。没有实现相应方法。是会报错的。
在Factory调用,看下效果。
public abstract class Factory {
public abstract void prepared_matrial();
public abstract void do_make();
public abstract void sale();
public static void main(String[] args){
CarFactory carFactory = new CarFactory();
carFactory.prepared_matrial();
carFactory.do_make();
carFactory.sale();
System.out.println("=========分割线=========");
FoodFactory foodFactory = new FoodFactory();
foodFactory.prepared_matrial();
foodFactory.do_make();
foodFactory.sale();
}
}

通过上面的代码会发现每次生成一个产品,每次都要调用这三个方法。能否把这三个方法在某处统一调用?
抽象类的一个特性是:抽象类不是必须要有抽象方法,也可以有实现了的方法;但是一旦有一个方法是抽象方法,此类必须设置为抽象类。
既然抽象类中可以有实现方法,那么就在Factory中定义一个总的生产方法,这个方法调用其他步骤来实现最终生产目的
public abstract class Factory {
public abstract void prepared_matrial();
public abstract void do_make();
public abstract void sale();
public void createProduct(){
prepared_matrial();
do_make();
sale();
}
public static void main(String[] args) {
CarFactory carFactory = new CarFactory();
carFactory.createProduct();
System.out.println("==============");
FoodFactory foodFactory = new FoodFactory();
foodFactory.createProduct();
}
}
也就是说,不用一个个的调用生产步骤的方法,只调用总生产方法就行了。这就是java模板方法模式。
java学习笔记16-抽象类的更多相关文章
- Java学习笔记16(面向对象九:补充内容)
总是看到四种权限,这里做一个介绍: 最大权限是public,后面依次是protected,default,private private修饰的只在本类可以使用 public是最大权限,可以跨包使用,不 ...
- Java学习笔记之抽象类与接口
抽象类(abstract) 抽象类概述:一个类被abstract修饰表示这个类是抽象类, 自己定义方法但是不实现方法,后代去实现 抽象方法: 一个方法被abstract修饰表示这个方法是抽象方法 ...
- Java 学习笔记(16)——Java数据库操作
数据库操作是程序设计中十分重要的一个部分,Java内置JDBC来操作数据库 JDBC使用 JDBC--Java Database connecting Java数据库连接:本质上JDBC定义了操作数据 ...
- 0026 Java学习笔记-面向对象-抽象类、接口
抽象方法与抽象类 抽象方法用abstract修饰,没有方法体部分,连花括号都不能有: 抽象方法和抽象类都用abstract修饰 包含抽象方法的类一定是抽象类:但不包含抽象方法的类也可以是抽象类 不能创 ...
- java学习笔记16(正则表达式)
正则表达式: 定义:在pattern类中有简单规则定义,具有特殊含义的字符串: 作用:用于一些字符串,比如验证注册邮箱,密码,用户名等: 正则表达式的语法: 1)字符:'\'反斜杠 \t 代表制表 ...
- JAVA学习笔记16——控制线程
Java的线程支持提供了一些便捷的工具方法,通过这些便捷的工具方法可以很好地控制线程执行. join线程 Thread提供了让一个线程等待另一个线程完成的方法——join().当在某个线程执行流中 ...
- JAVA学习笔记16——线程生命周期
当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New).就绪(Runnable).运行(Running).阻塞(Blocking)和 ...
- JAVA学习笔记16——线程的创建和启动
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码).Java使用线程执行体来代表这段 ...
- Java学习笔记之---比较接口与抽象类
Java学习笔记之---比较接口与抽象类 抽象类是描述事物的本质,接口是描述事物的功能 接口与抽象类的异同 1.一个类只能继承一个父类,但是可以有多个接口 2.抽象类中的抽象方法没有方法体,但是可以有 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
随机推荐
- 學校 iPad 使用學校google帳號登入Google Drive 提示"裝置政策提醒"的解決方法
因爲學校iPad 是給學生和老師使用,大多數是不需要設置鎖屏密碼的,然後 Gsuite 默認是開啓 “行動管理服務” 的策略為基本,就是需要設備設置鎖屏密碼以保障資料安全,不那麽容易被竊取. 然後就出 ...
- 【数据库开发】MySQL命令大全
1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码1.连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...
- HTML中,a href =" "和 a href ="#"的区别
a href ="" 刷新当前页面,回到页面顶部a href ="#"不会刷新页面,回到页面顶部.浏览器地址栏网址后面会多显示1个#.
- leetCode:reverseInteger 反向整数 【JAVA实现】
反向整数 给定一个 32 位有符号整数,将整数中的数字进行反转,如果超出整数的最大或者最小范围返回0 更多文章查看个人博客 个人博客地址:反向整数 方法一 利用StringBuilder的revers ...
- java输入输出 -- java NIO之文件通道
一.简介 通道是 Java NIO 的核心内容之一,在使用上,通道需和缓存类(ByteBuffer)配合完成读写等操作.与传统的流式 IO 中数据单向流动不同,通道中的数据可以双向流动.通道既可以读, ...
- 软件模拟IIC实现EEPROM
....妈的太难. 反正就是控制引脚的高低电平 实现数据的读取....参考 I2C的协议层和物理层的那个几个图,个个信号产生的电平 自己看源码去把. 头疼
- 【5号课堂】scratch制作电子生日贺卡
贺卡在我国的使用由来已久,在古代,上层士大夫有用名帖互相问候的习俗 唐宋以后,贺卡的名称及功能有所进步,称为”门状“或“飞帖“,到了明清,又叫“红单“.“贺年帖“等等,听着名字就知功能越来越世俗化,文 ...
- ASP.NET Core分布式项目-3.oauth2与open id connect 对比
oauth2 open id connect
- Luogu5327 ZJOI2019语言(树上差分+线段树合并)
暴力树剖做法显然,即使做到两个log也不那么优美. 考虑避免树剖做到一个log.那么容易想到树上差分,也即要对每个点统计所有经过他的路径产生的总贡献(显然就是所有这些路径端点所构成的斯坦纳树大小),并 ...
- php底层源码之数组
数组key和value的限制条件 <?php $arr = array( 1 => 'a', "1" => "b", 1.5 => &q ...