抽象类

抽象类的定义与使用
抽象类只是在普通类的基础上扩充了一些抽象方法而已,所谓的抽象方法指的是只声明而未实现的方法(即没有方法体)。所有抽象方法要求使用abstract关键字来定义,并且抽象方法所在的类也一定要使用abstract关键字来定义,表示抽象类。
简单来说:抽象类就是普通类的超集,只是比普通类多了一些抽象方法而已。
范例:定义一个抽象类

abstract class Person{
private String name ; // 属性
public String getName(){ // 普通方法
return this.name;
}
public void setName(String name){
this.name = name ;
}
// {}为方法体,所有抽象方法上不包含方法体
public abstract void getPersonInfo() ; //抽象方法
}

抽象方法:使用abstract关键字定义的只有方法声明没有方法体的方法。
抽象类的使用原则:

  • 所有抽象类必须有子类(final与abstract关键字不能同时出现)
  • 抽象类的子类必须覆写所有抽象方法(或者子类也是用abstract关键字,private(无法被覆写)与abstract(必须被覆写)不能同时出现)
  • 抽象方法必须被覆写,抽象类无法产生实例化对象,但可以通过向上转型实例化。而且子类依然遵循对象实例化流程,先调用抽象类的构造方法而后在调用子类构造。抽象类还有单继承局限。
    范例:使用抽象类
abstract class Person{
private String name ; // 属性
public String getName(){ // 普通方法
return this.name;
}
public void setName(String name){
this.name = name ;
}
// {}为方法体,所有抽象方法上不包含方法体
public abstract void getPersonInfo() ; //抽象方法
}
class Student extends Person{
public void getPersonInfo(){
System.out.println("I am a student");
}
}
public class Test{
public static void main(String[] args) {
Person per = new Student() ; //实例化子类,向上转型
per.getPersonInfo() ; //被子类所覆写的方法
}
}

模板设计模式

五大设计原则:OCP原则(开闭原则)
一个软件实体如类,接口等应该对扩展开放,修改关闭
先找到第三方,找到第三方学会一半。
第三方:模板类,将核心算法与具体子类分离,子类只需要覆写某几步流程就好。

  • 模板设计模式—基于抽象类的设计模式
    在一个方法中定义一个方法的骨架(冲咖啡),而将一些步骤延迟到子类中实现
    优点:模板模式可以使得子类在不改变核心算法的基础上,具体实现算法中的某些步骤

  • 模板类的组成
    —final关键字修饰的核心算法 模板方法
    —abstract关键字修饰的抽象方法,延迟到子类 抽象方法
    —通用方法,所有都一样的方法 子类通用方法
    —钩子方法,默认不做事的方法,子类可以视情况而定是否需要覆写

接口的定义与使用

开发原则:
接口优先原则,在一个场景既可以使用接口也可以使用抽象类的时候,优先使用接口。
接口的基本概念:
接口就是抽象方法和全局变量的集合,在java中接口使用interface关键字定义。
范例:简单定义一个接口

interface IMessage{
public static final String MSG = "I am a biter" ; // 全局常量
public abstract void print() ; // 抽象方法
}

接口无法直接创建实例化对象,需要通过通过向上转型为其实例化 ;接口命名一般以I开头,子类使用impiements关键字实现接口,子类一般以impl结尾,表示此类事一个接口的子类
接口允许许多实现(多继承),一个子类可以同时使用implements实现若干个接口
接口使用限制
接口中只允许public权限,(不管属性还是方法)而且接口中abstract,final,static关键字均可以不写
当一个子类即需要实现接口又需要继承抽象类时,需要先使用extends继承一个抽象类,然后在使用implements实现多个接口。
接口不能实现继承抽象类,接口可以使用extends继承多个父接口关系
接口的应用场景——混合行为
1.定义操作标准
2.表示一种能力、行为

工厂设计模式

第三方:
工厂类,将客户端的产生对象与具体子类分离。提取到专门工厂类产生对象
简单工厂模式
没有工厂类时,用户无法便捷的得到产品
问题本质:主方法(客户端)直接与具体产品交换
——将客户端产生商品的行为提取到一个新的类中——工厂类
特点:
1.一个抽象产品类(computer)
2.多个具体的产品类(macbookpro)
3.一个工厂(负责生产所有产品,客户端与工厂交互,不与产品交互)
当多个具体产品出现家族式特征时,为了保证不同产品系之间的隐私,不同产品系有自己的工厂
工厂方法模式
1.一个抽象产品类象
2.多个具体的产品类
3.一个抽象工厂
4.多个具体工厂
抽象工厂模式
代理设计模式——代练 代购
第三方:代理类,将真实业务与辅助操作解耦(分离)(买电脑与出国排队,发快递解耦)
真实业务类
辅助类
特点:一个接口,两个子类。其中一个子类负责完成真实业务,另外一个辅助
代理类中:需要传入真实业务对象,代理需要知道真实客户是谁,完成真实业务是由真实对象完成,代理只需要辅助。(掏钱的是客户,并不是代购)通过构造方法传入(下订单时,商家已经知道客户是谁)
传入的是接口对象:只要是接口中定义的业务,代理都可以进行代理。(只要是买电脑,代购都可以处理,若传入真实类,则只能代购 具体品牌)

Java语言之抽象类与接口相关推荐

  1. Java提高篇 —— 抽象类与接口

    一.前言 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间 ...

  2. java基础之抽象类和接口

    一.抽象: **抽象类(abstract class):**使用了abstract关键字所修饰的类叫做抽象类.抽象类无法实例化,也就是说,不能new出来一个抽象类的对象(实例). **抽象方法(abs ...

  3. Java 中的抽象类和接口

    Java 中的抽象类和接口 1.参考资料 深入理解Java的接口和抽象类 Java抽象类与接口的区别 2.前言 有一次旁听面试的时候,听到面试官问了一句:既然 JDK8 中接口有了默认方法实现,那接口 ...

  4. Java自学笔记——Java面向对象——04.抽象类、接口、内部类

    Java 面向对象各节 Java自学笔记--Java面向对象--01.回顾方法 Java自学笔记--Java面向对象--02.构造器.类和对象 Java自学笔记--Java面向对象--03.封装.继承 ...

  5. Java复习之抽象类和接口

    Java复习之抽象类和接口 Java复习之抽象类和接口 什么是抽象类和接口 抽象类与接口的区别 什么情况下使用抽象类或接口 一个demo引起来的对于java方法区堆栈的研究 首先我们需要明白抽象类与接 ...

  6. Java笔试面试-抽象类与接口

    抽象类 定义:   在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.简单来说,使 ...

  7. java笔记之抽象类和接口

    前言 java笔记之抽象类和接口是开发人员的设计工具 正文 1.抽象类 客观存在的一类事物,当这类事物都是抽象的,无法具体的描述. 1)语法: 修饰符 abstract class 类名{ } 2)特 ...

  8. Java中类、抽象类、接口之间的区别和联系。

    Java中类.抽象类.接口之间的区别和联系. 程序设计所面对的问题域--客观世界,是由许多事物构成的,这些事物既可以是有形的(比如一辆汽车),也可以是无形的(比如一次会议).把客观世界中的事物映射到面 ...

  9. JAVA中的抽象类与接口

    JAVA中的抽象类与接口 接口和抽象类的区别: 接口和抽象类是支持抽象类定义的两种机制. 接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现. 抽象类 ...

最新文章

  1. HDU 1432 Lining Up (POJ 1118)
  2. Vue.js 由 1 到 2 的旅程 - (1)
  3. adf4351_在ADF实体PK属性中使用MySQL自动增量PK列
  4. 虚拟机与系统文件互传(VMware Tools)的使用
  5. 最大均值差异java_MATLAB最大均值差异(Maximum Mean Discrepancy)
  6. 8、angular的select
  7. C#sharp 必须扩展的知识点
  8. Sql Server REPLACE函数的使用
  9. iOS IM开发建议(一)App框架设计
  10. 编译安装mysql5.7.24踩的坑
  11. java读取Excel2016
  12. LSTM神经网络在证券市场分析上的应用
  13. git push报错 rejected
  14. 2021年茶艺师(初级)考试资料及茶艺师(初级)找解析
  15. android开发中Wifi功能总结
  16. 为什么应该学好软件工程?
  17. 应用在生物医学领域中的NLP预训练语言模型(PubMedBERT)
  18. matlab边坡可靠性分析,基于ABAQUS-ANFIS-MCS的岩质边坡可靠性分析
  19. 软工1816 · 第六次作业 - 团队选题报告
  20. html怎么填充单元格颜色,Numbers怎么填充颜色 Numbers填充颜色详细方法

热门文章

  1. C语言-一元二次方程(求根公式)
  2. UML图包含元素分析
  3. 阿里云-云开发平台 应用的创建及使用
  4. jquery表单form提交阻止页面全部刷新
  5. Linux系统CentOS进入单用户模式和救援模式详解
  6. 获取 html class属性,jquery获取class属性的值
  7. vue如何sleep_H5如何保持屏幕常亮—nosleep.js
  8. 熟悉python中的tkinter图形包--(写一个参数计算器)
  9. 从”JAVA“而终 16:java sql学习资料大全
  10. java web 邮件_JavaWeb实现邮件发送接收功能