抽象方法

详解 抽象类

馋奶兔 提交于 2020-03-05 09:38:04
本人在这篇博文中要讲解的知识点,和本人之前的一篇博文有所关联。因为,“ 抽象类 ” 是按照 “ 自下而上 ” 的顺序来编写所需的类,而在本人之前的博文 《详解 继承(上)—— 工具的抽象与分层》 中讲到的 继承 则与之相反,按照 “ 自上而下 ” 的顺序来编写所需类,那么,话不多说,现在本人就开始讲解这篇博文的主题 抽象类的基本概念: 首先,本人来介绍下 什么是抽象类 : 定义 : 在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类 那么,抽象类具有如下 特点 : 特点 : 抽象类 和 抽象方法 必须用abstract关键字修饰 : 抽象类格式: abstract class 类名 {} 抽象方法格式: public abstract void eat(); 抽象类 不一定有抽象方法,有抽象方法的类 一定是抽象类 抽象类中 可以有构造方法 ,抽象类 不能进行实例化 : 问:那么要构造方法有什么作用呢? 答曰:用于子类访问父类数据时的初始化 抽象类 不能直接实例化 问:那么,抽象类如何实例化呢? 答曰:按照多态的方式,由具体的子类实例化。其实这也是 多态的一种 ,抽象类多态。 抽象类的 子类 : 要么是 抽象类 要么 重写抽象类中的所有抽象方法 本人来通过 两个例子 ,来展示这个知识点的应用: 一、图形类:

面向对象的软件开发方法

早过忘川 提交于 2020-03-04 15:45:31
一、了解什么是面向对象的软件开发方法 答:1、OOSD是一种把面向对象的思想应用于软件开发过程,是一种当今成熟的、普遍流行的软件开发方法 2、面向对象方法的解决思路是从现实世界中的客观对象入手,尽量运用人类的自然思维方式来构造软件系统。是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。 3、面向对象方法中,把一切都看成是对象。对象是功能抽象和数据抽象的统一,较过程稳定。 二、面向对象软件开发的主要思想 答:1、按照人类的自然思维的方式,对客观世界建立软件模型。 2、客观实体和实体之间的联系构成了现实世界的所有问题。 3、面向对象技术将现实世界中的实体及相互关系映射为对象及对象间的关系,实体间的相互作用被映射为对象间的消息发送等。 三、面向对象方法的主要优点 答:(1)把易变的数据结构和部分功能封装在对象内并加以隐藏 i、保证了对象行为的可靠性。 ii、对其修改并不会影响其它对象,有利于维护,对需求变化有较强的适应。 (2)封装性和继承性有利于复用对象 i、把对象的属性和操作捆绑在一起,提高了对象(作为模块)的内聚性,减少了与其它对象的耦合,为复用对象提供了可能性和方便性。(高内聚,低耦合) ii、在继承结构中,特殊类对一般类的继承,本身就是对一般类的属性和操作的复用。 四、面向对象开发方法的组成 答:(1)OOA(Object-Oriented

死磕Lambda表达式(二):Lambda的使用

淺唱寂寞╮ 提交于 2020-03-04 15:39:06
城市就是森林,每一个男人都是猎手,每一个女人都是陷阱。——《三体》 在哪使用Lambda表达式? 在上一篇文章( 传送门 )中介绍了Lambda表达式的基本语法,其中的举了一个Lambda表达式的例子,就是按照品牌给口罩列表进行排序: maskList.sort((Mask o1, Mask o2) -> o1.getBrand().compareTo(o2.getBrand())); 这里使用的 sort 方法的参数类型是 Comparator<T> ,我们就是把Lambda表达式作为 Comparator<T> 传入 sort 方法中的。 Comparator<T> 就是一个函数式接口,那么什么是函数式接口? 欢迎关注微信公众号: 万猫学社 ,每周一分享Java技术干货。 函数式接口 函数式接口就是有且仅有一个抽象方法的接口。上面提到的 Comparator<T> 接口,虽然有很多默认方法,但有且仅有一个抽象方法 compare ,所以它仍然是一个函数式接口。再举个例子: package java.util.concurrent; @FunctionalInterface public interface Callable<V> { V call() throws Exception; } Callable 接口只有一个 call 抽象方法,所以它也是函数式接口。

理解Abstract class和Interface

随声附和 提交于 2020-03-04 10:10:47
前言 在Java中, 实现 抽象的机制有2种 : 抽象类(abstract class) 和 接口(Interface) 二者非常类似,甚至可相互替换,因此很多开发者开发时对于二者的选择十分随意。其实,2者之间存在很大区别 本文将对抽象类( abstract class )、接口( Interface ) 之间的区别 进行详细 讲解剖析 抽象是什么 抽象就是忽略与当前目标无关的相关方面,以便更充分地突出与当前目标有关的方面。 抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节 。 抽象体(即被Abstract和Interface定义的抽象事物)在实际编程中定义一类行为,却不对其做实际的描述, 在继承或者实现中才涉及到具体的实现 ,也就是说, 抽象体隐藏了具体的实现,而仅仅提供统一的接口,在实际实现中可以根据需要进行实现或者扩展。这符合面向对象设计原则中的"对修改封闭,对扩展开放"的原则 。 语法和实践上的区别 抽象类主要是类对象的抽象集合 抽象方法主要是类方法的抽象集合 Abstract Class Interface 实例化 不能 不能 类 是一种继承关系,一个类智能使用一次继承关系。 可以通过继承多个接口实现多重继承 一个类可以实现多个接口 数据成员 可以有自己的 必须是默认的static final 方法成员 可以有私有方法,有非abstract方法

设计模式之:工厂方法模式

筅森魡賤 提交于 2020-03-03 19:35:45
模式的定义与特点 工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”,它不属于 GoF 的 23 种经典 设计模式 ,它的缺点是增加新产品时会违背“开闭原则”。 本节介绍的“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。 工厂方法模式的主要优点有: 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程; 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则; 其缺点是:每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。 模式的结构与实现 工厂方法模式由抽象工厂、具体工厂、抽象产品和具体产品等4个要素构成。本节来分析其基本结构和实现方法。 1. 模式的结构 工厂方法模式的主要角色如下。 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。 具体工厂

有道难题之OO

爷,独闯天下 提交于 2020-03-02 22:54:43
有道难题之OO 有人提出要用OO的思路来解决算法问题,OK,没问题,eaglet 今天就尝试用OO来实现算法。既然谈OO,我们就重点讨论设计,不重点讨论算法的效率了。 在开始OO之前,我想先说说什么是OO设计。OO设计就是面向对象设计,有人说不要认为你用了C#就OO了,不错用C#照样可以写出面向过程的代码。不过eaglet 还有补充一下,不要认为你用了class 就OO了。程序是否OO,要看程序是否很好的体现了面向对象的思想。面向对象程序设计可以被视作一种在程序中包含各种独立而又互相调用的单位和对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数 的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看 作一个小型的“机器”,或者说是负有责任的角色。 下面再简单列举一下面向对象的基本设计原则: 1) 单一职责原则 (The Single Responsiblity Principle,简称SRP) 2) 开放-封闭原则 (The Open-Close Principle,简称OCP) 3) Liskov 替换原则(The Liskov Substitution Principle,简称LSP) 4) 依赖倒置原则(The Dependency Inversion

抽象方法与多态性——小甲鱼C++学习笔记(25)

烂漫一生 提交于 2020-03-01 22:56:16
抽象方法 抽象方法,也可以称为纯虚函数。是面向对象编程技术的另一个核心概念。在设计一个多层次的类继承关系常会用到。 把一个方法说明为一个抽象方法,等于告诉编译器: 这个方法必不可少。但我现在在这个基类里还不能为他提供一个实现。** 抽象方法的语法很简单,在声明一个虚方法的基础上,在原先的末尾上加上“=0”。 (告诉这个编译器不用浪费时间在这个类里寻找这个方法的实现) 总结理解 抽象方法就是在虚方法的后面加上 “=0” 声明为虚方法就是告诉编译器:在分配内存的时候,要根据指针不同的类型来调用正确的方法。 声明为抽象方法就是告诉编译器:在当前这个基类不能实现,去忙别的。 多态性 多态性:是指用一个名字定义不同的函数,调用同一个名字的函数,却执行不同的操作,从而实现传说中的“一个接口,多种方法”。 多态是如何实现绑定的? ----编译时的多态性:通过重载实现。 ----运行时的多态性:通过虚方法实现。 进一步理解析构函数 一般类的析构函数都是释放内存资源,如果析构函数不被调用的话将会造成内存泄漏。 析构器定义为虚方法是为了当一个基类的指针删除一个派生类的对象时,派生类的析构函数可以被正确调用。 代码实现 抽象函数部分: //int *pointer = new int;//声明一个整型指针,并在程序运行时将它指向分配的内存空间 //delect *pointer;//删除指针,释放内存

面向对象的四大特性

别说谁变了你拦得住时间么 提交于 2020-03-01 19:36:33
封装(Encapsulation) 概念 :封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据。 对于封装这个特性,需要编程语言本身提供一定的语法机制来支持。这个语法机制就是访问权限控制。 private、public 等关键字就是 Java 语言中的访问权限控制语法。private 关键字修饰的属性只能类本身访问,可以保护其不被类之外的代码直接访问。public关键字则是完全相反的作用。 封装的意义 对类中属性的访问权限做限制,约束外部对类内部的行为,避免外部错误的修改类中属性。 且,类仅仅通过有限的方法暴露必要的操作,可以提高类的易用性。调用者只需要了解有限的几个方法调用,而不需要了解太多背后的业务细节,用错的概率就会减小很多。 抽象(Abstraction) 概念 :封装主要讲的是如何隐藏信息、保护数据,而抽象讲的是如何隐藏方法的具体实现,让调用者只需要关心方法提供了哪些功能,并不需要知道这些功能是如何实现的。 在面向对象编程中,我们常借助编程语言提供的接口类(比如 Java 中的 interface 关键字语法)或者抽象类(比如 Java 中的 abstract 关键字语法)这两种语法机制,来实现抽象这一特性。 实际上,抽象这个特性是非常容易实现的

Java 笔记-抽象类,接口

时光怂恿深爱的人放手 提交于 2020-03-01 19:18:56
一.什么是抽象类 简单理解的来说就是不够具体的类, 具体 的反义词— 抽象 . 比如说一个图形,这就不够具体,一个图形可以具体的细分为三角形,圆形,长方形等等,三角形又可以更加具体,等腰三角形,等边三角形等等 .而抽象类就是将明显具有自己独特特征的具体类模糊化,将大家都有的共同特征抽象出来,比如说医生类,护士类,士兵类,可以通通抽象为—人类.他们都拥有人类的特征,比如说吃饭,睡觉,娱乐之类的,这些执行的方法都是相似的代码,用抽象类抽象出来,再通过子类继承实现就可以大大减少代码量(偷懒+_+). 抽象类也是普通类前加上了 abstarct 关键字,同样,一个普通方法前加上了这个关键字也就成为了抽象方法. 二.如何使用抽象类 不能直接创建(new)抽象类对象 必须用一个子类来继承抽象类 子类必须覆盖重写抽象父类中的所有抽象方法,否则会编译报错,除非该子类也是抽象类 覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后然后方法体大括号 创建子类进行使用 注意 : 抽象类中,可以有构造方法(有默认的super()),是供子类创建对象时,初始化父类成员使用的 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类 三.接口 1. 什么是接口 接口就像是一种公共规范标准,如同国标,众多工厂其实互相不认识,不联系,但造出来的东西就是能够一起使用.比如也像一个USB接口,U盘

Java的抽象类与抽象方法(abstract class and abstract method)

…衆ロ難τιáo~ 提交于 2020-03-01 16:15:16
为什么需要抽像Abstract 当多个类出现相同的功能,而只是功能的主体不同时,可以向上抽象。 所谓抽象就是,只抽取功能的定义,而不抽取功能的主体 抽象Abstract,简单理解就是:看不懂。 抽样类的特点: 抽象方法一定定义在抽象类中,但抽象类中的方法不必全是抽象的,也可以有非抽象的方法。 只要类中有一个方法是抽象的,这个类就是抽象的。 抽象方法和抽象类必须用abstract关键字修饰。 抽象类不可以new一个对象,因为抽象类中的方法没有方法体,new一个对象无实际意义。 抽象类中定义的方法要被使用,就要由子类去继承这个抽象类,并且子类要重写抽象类中的所有抽象方法。 如果子类只是重写了父类的部分抽象方法,那么这个子类仍然时抽象的。 为什么需要抽象的示例: class Cat { void yell() { System.out.println("Cat: meow meow meow..."); } } class Dog { void yell() { System.out.println("Dog: woof woof woof..."); } } 上面两个类,小猫和小狗都有发出叫声的功能,为了能够抽象出阿猫阿狗的叫声,我们写了另一个Pet类 class Pet { void yell() { System.out.println("pet yell..."); } }