7.抽象类

1.定义:

1.abstract +class+类名

2.作用:

1.当父类的方法需要声明,但具体的实现通过子类重写完成时,可以将父类声明为抽象类

3.细节:

 1.当一个类中有抽象方法时,其必须声明为抽象类​         2.抽象类不能实例化对象​           3.当子类继承父类时,子类必须重写父类的所以抽象方法,否则将子类定义为抽象类​           4.abstract不能和static private final 一起使用,违背了重写原则

package review07;public class AbstarctUse {public static void main(String[] args) {//抽象类不能实例化对象
//        Animal animal = new Animal(); 'Animal' is abstract; cannot be instantiated//父类的speak()让不同的子类进行不同的实现,通过多态的动态绑定机制进行不同的调用!Animal temp01 = new Cat();temp01.speak();Animal temp02 = new Dog();temp02.speak();}
}abstract class Animal {public String name;public int age;abstract public void speak();
}class Cat extends Animal {@Overridepublic void speak() {System.out.println("小猫喵喵叫!");}
}class Dog extends Animal {@Overridepublic void speak() {System.out.println("小狗汪汪叫!");}
}
//将子类修饰为抽象类则不需实现父类的抽象方法
abstract class Tiger extends Animal {}

4.模板设计模式(抽象类的应用)

1.定义:父类作为抽象类相当于一个模板,子类继承进行各自的改造2.实现:​           1.父类提供模板,并且将抽象方法给子类进行不同的实现​          2.父类中抽象出子类共有且逻辑功能相同的方法
package review07;
/*
* 1.不同型号的螺丝需要的打磨次数不同,统计不同型号螺丝需要的打磨时间
* */
public class TemplatePattern {public static void main(String[] args) {Screw01 screw01 = new Screw01();screw01.countTime();Screw02 screw02 = new Screw02();screw02.countTime();Screw03 screw03 = new Screw03();screw03.countTime();}
}
class Screw01{public void polish(){for (int i=0;i<200000;i++) {//假设i为打磨次数}}public void countTime(){long starttime=System.currentTimeMillis();polish();long endtime=System.currentTimeMillis();System.out.println("01号螺丝需要的打磨时间为:"+(endtime-starttime));}
}
class Screw02{public void polish(){for (int i=0;i<1000000;i++) {//假设i为打磨次数}}public void countTime(){long starttime=System.currentTimeMillis();polish();long endtime=System.currentTimeMillis();System.out.println("02号螺丝需要的打磨时间为:"+(endtime-starttime));}
}
class Screw03{public void polish(){for (int i=0;i<2000000;i++) {//假设i为打磨次数}}public void countTime(){long starttime=System.currentTimeMillis();polish();long endtime=System.currentTimeMillis();System.out.println("03号螺丝需要的打磨时间为:"+(endtime-starttime));}
}
//普通的实现模式,每种型号的打磨次数,和时间计算在各自类中实现
//但可以看出代码可读性差,打磨次数是不同的,但时间统计函数逻辑功能是完全相同的

模板设计模式改进:

package review07;
/*
* 1.不同型号的螺丝需要的打磨次数不同,统计不同型号螺丝需要的打磨时间
* */
public class TemplatePattern {public static void main(String[] args) {Screw01 screw01 = new Screw01();screw01.countTime();Screw02 screw02 = new Screw02();screw02.countTime();Screw03 screw03 = new Screw03();screw03.countTime();//利用继承的查找机制,去调用父类的countTime函数//其中调用polish时,会根据多态的动态绑定调用不同的polish}
}
abstract class Screw{abstract public void polish();long times; //统计打印次数public void countTime(){long startTime=System.currentTimeMillis();polish();long endTime=System.currentTimeMillis();System.out.println("打磨时间: "+(endTime-startTime));}
}
class Screw01 extends Screw{public void polish(){for (int i=0;i<200000;i++) {times+=i;//假设i为打磨次数}}
}
class Screw02 extends Screw{public void polish(){for (int i=0;i<1000000;i++) {//假设i为打磨次数times+=i;}}
}
class Screw03 extends  Screw{public void polish(){for (int i=0;i<200000;i++) {times+=i;//假设i为打磨次数}}}

抽象类及模板设计模式相关推荐

  1. java 抽象属性 设计_Java 抽象类与模板设计模式详解

    抽象类 抽象类是为了方法覆写而提供的类结构,因为其无法自身直接进行对象实例化操作,所以在实际应用中,抽象类主要目的是进行过程操作使用,当你要使用抽象类进行开发的时候,往往都是在你设计中需要解决类继承问 ...

  2. 0047 抽象类、模板设计模式

      /*抽象类1.用abstract关键字来修饰一个类时,这个类就叫抽象类访问修饰符 abstract 类名{}2.用abstract关键字来修饰一个方法时,这个方法就是抽象方法访问修饰符 abstr ...

  3. 继承、抽象类、模板设计模式、_nal关键字

    继承.抽象类.模板设计模式.final关键字 今日内容介绍 1. 面向对象基础知识回顾* 如何定义类public class Student{}* 如何创建类的对象Student s = new Stu ...

  4. java—基于抽象类的模板设计模式(星巴克咖啡冲泡法的优化及扩展)

    基于抽象类的模板设计模式 模板设计模式: 在一个方法中定义一个算法的骨架(在父类中定义),将一些步骤延迟到子类. 模板方法使得子类可以在不改变算法的情况下,重新定义算法的某些步骤. 在父类中对相同的方 ...

  5. Java神秘的抽象类,模板设计模式

    Java神秘的抽象类,模板设计模式 1.概述 2.基本使用 3.一些细节 4.抽象类的最佳实践 - 模板设计模式 1.概述 抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充. 一 ...

  6. 简单的接口和抽象类实现模板设计模式

    一.先使用接口实现模板设计模式 1.先写模板模式中大家公共的方法,将该方法放到一个接口里: public interface MyPublic {public void step02(); } 2.写 ...

  7. 【26天高效学完Java编程】Day11:继承、抽象类、模板设计模式详解

    本专栏将从基础开始,循序渐进,由浅入深讲解Java的基本使用,希望大家都能够从中有所收获,也请大家多多支持. 专栏地址:26天高效学习Java编程 相关软件地址:软件地址 所有代码地址:代码地址 如果 ...

  8. 01-复习回顾、继承、抽象类、模板设计模式

    day01[复习回顾.继承.抽象类模板设计模式] 今日内容 面向对象复习 类的创建------>必须掌握 对象的创建和使用------>必须掌握 匿名对象 继承 如何继承-继承的格式--- ...

  9. 面向对象之继承,抽象类、模板设计模式

    第1章 复习回顾 1.1 类和对象 定义一个类 格式: 修饰符 class 类名{//类中的五大成分.1.成员变量2.构造方法3.成员方法4.内部类5.代码块 } 代码: public class S ...

最新文章

  1. Android: 启动init.rc 中service的权限问题【转】
  2. Element 对象表示 XML 文档中的元素。
  3. python画剖面图_如何创建Matplotlib图形与图像和剖面图相匹配?
  4. 市电中断时,数据中心机房如何保证持续供电?
  5. Introduction to Financial Management
  6. 【渝粤题库】广东开放大学 计算机网络 形成性考核
  7. [暑假集训Day4T3]曲线
  8. 【BZOJ4300】—绝世好题(二进制dp)
  9. 第二节:如何正确使用WebApi和使用过程中的一些坑
  10. linux和windows和鸿蒙,linux很好,但为何大家都用Win,鸿蒙系统站错阵营了吗?
  11. web前端期末大作业--响应式汽车租赁网页设计--(HTML+CSS+JavaScript)实现
  12. STM32F407+CubeMX-使用TIM产生PWM信号
  13. mysql基础操作(二)
  14. mt4交易系统源码_mt4周边:一款免费的数据下载工具
  15. NYOJ243 - 交换输出
  16. ubuntu amd64 的锐捷连接解决办法---武汉大学
  17. 60个经典励志小故事
  18. vector的哈希值 Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) C
  19. git命令提交后push失败,缺少changeID的解决办法
  20. 如何加入家庭组计算机打印机,解决方案:Win7系统设置家庭组计算机设置共享打印机...

热门文章

  1. 魔兽世界任务制作教学,已经本人自己服务器中测试
  2. 1200套毕业答辩PPT模板
  3. Softing OPC Tunnel——绕过DCOM配置实现OPC Classic广域网通信
  4. Matlab 数字数组转换成集中字符串
  5. mathtype插入在WPS中出现The MathType DLL cannot be found问题
  6. Webots平台NAO机器人寻路避障实现
  7. 在vue页面中使用伪元素进行 气泡框创建|选中效果自定义|滚动条自定义
  8. Learning from Synthetic Data: Addressing Domain Shift for Semantic Segmentation
  9. 禁止暴风影音的自动升级的方法
  10. 为何叫我出生在70年代?