抽象方法

关于抽象类、抽象方法以及接口

谁都会走 提交于 2020-03-10 18:58:16
关于抽象类、抽象方法 abstract修饰 抽象类不能被实例化,抽象类里可以包含抽象方法也可以不包含;但有抽象方法的类必须是抽象类。 抽象类可以包含: 成员变量 方法(普通方法和抽象方法) 构造器(不是用来构造对象的,主要是给子类调用) 初始化块 内部类(接口、枚举) 含有抽象方法的类,包括: 直接定义了一个抽象方法; 或继承了一个抽象父类,但没有完全实现父类包含的抽象方法; 或实现了一个接口,但没有完全实现接口包含的方法 只能定义为抽象类。 利用抽象方法和抽象类的优势,可以更好地发挥多态的优势,使得程序更加灵活; abstract和final不能同时修饰同一个类或方法 当使用abstract修饰类时,表明这个类只能被继承; 当使用abstract修饰方法时,表明这个方法必须由子类提供实现(即重写)。 而final修饰的类不能被继承,final修饰的方法不能被重写,因此final和abstract不能同时使用。 abstract和static不能修饰同一个方法, 但它们可以同时修饰内部类。 abstract和private不能修饰同一个方法。 abstract不能修饰成员变量、局部变量,也不能修饰构造器。 使用模板模式的两种情形 抽象父类可以只定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给子类去实现。 父类中可能包含需要调用其他方法的方法,这些被调方法既可以由父类实现

抽象类和抽象的方法注意事项

天大地大妈咪最大 提交于 2020-03-10 14:24:16
1:如果一个类用Abstract修饰,那么该类就是抽象类; 2:抽象方法中可以有方法体,也可以有普通方法 3:抽象方法不能有方法体,甚至连{}都不能有,直接以分号结尾; 4:抽象类可以有构造 5:抽象类不能实例化 6:抽象类不能是密封类或者静态类的 为什么不能是静态类的: 静态类会静态存储区构建一个类的实例,而抽象类不能实例化,所以两者是相违背的 为什么不能是密封类的: 抽象类是让别人去继承 ,然后重写抽象方法 密封类不想让别人去继承,两者是相违背的 7:如果一个类继承自抽象类,必须重写抽象类的所有方法,除非子类本身也是抽象类 8:一键重写的快捷键是:Ctrl+.,或者是alt +shif +F10 9:抽象类中的抽象方法用来约束子类方法的格式的 10:抽象方法必须存在于抽象类中 来源: https://www.cnblogs.com/3020815dzq/p/8304040.html

Lambda表达式及其应用场景

若如初见. 提交于 2020-03-10 06:30:23
Lanmda表达式 Lambda表达式是给函数式接口( FunctionalInterface )的形参或变量赋值用的. 函数式接口就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 函数式接口的分类 消费型接口(Consumer)特点:有参无返回值 供给型接口(Supplier)特点:无参有返回值 判断型接口(Predicate)特点:返回值类型为布尔类型 功能型接口(Function) 特点:有参有返回值 import java.util.ArrayList; import java.util.function.Predicate; import java.util.stream.Stream; public class TestLambda { public static void main(String[] args) { 1、消费型接口 //consumer<T> : void accept<T t> //集合java.lang.Collection系列的集合在java8之后增加了这样的方法: // default void forEach(consumer<? super T> action) ArrayList<Integer> a = new ArrayList<>(); a.add(1);a.add(2);a.add(3);a.add(4);a.add

JDK8函数式接口的理解

╄→尐↘猪︶ㄣ 提交于 2020-03-09 12:20:29
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 函数式接口可以被隐式转换为 lambda 表达式。 昨天突然在看java8源码时候,发现 Comparator接口有两个抽象方法,一个是compare,另一个是equals方法;这与函数式接口定义有冲突,因为在调用用lambda表达式调用Comparator接口中都是实现了compare方法,并没有实现equals,而equals是Object中的方法,所用的类都继承Object类,所以equals继承了Object中是实现,所以函数式接口(Functional Interface)就是一个有且仅有一个(除和Object中方法有相同签名的外)抽象方法,但是可以有多个非抽象方法的接口。 来源: https://www.cnblogs.com/alex-xyl/p/12447402.html

设计原则

一曲冷凌霜 提交于 2020-03-07 22:48:31
一、面向对象应用程序开发原则( SOLID ) 1 单一职责原则( SRP ) 定义: 一个类应该只有一个发生变化的原因。这条原则曾被称为内聚性,即一个模块的组成元素之间的功能相关性。 为什么要遵守这条原则? 如果一个类承担的职责过多,就等于把这些职责耦合到了一起。一个职责的变化可能削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。 运用与辨析 例 1 :记录日志 public class Logger { public void LogToFile<T>(T msg); public void LogToDB<T>(T msg); public void LogToWindows<T>(T msg); } 这个例子定义了一个日志类,包含三种方法:将日志写入本地文件、数据库或 windows 系统日志。一般会人为日志类记录日志这个动作算做一个职责,然而事实并非如此,将日志记录到不同的存储介质算作不同的职责。基于这种认识,断定这个类包含了太多的职责,应该将职责分离出来。 例 2 :一个大的业务层类 一个用户履历操作相关的类,包括:用户的教育背景,社会兼职职务,工作经历个人简历,获得的荣誉等,示例如下: public class UserResumeService { #region 社会兼职 //添加社会兼职 public

设计模式的六大原则

喜欢而已 提交于 2020-03-07 13:06:35
一、单一职责原则(Single Responsibility Principle) 二.开闭原则(Open-Closed Principle, OCP) 三、里氏代换原则(Liskov Substitution Principle, LSP) 四、依赖倒置原则(Dependence Inversion Principle,DIP) 五、接口隔离原则(Interface Segregation Principle, ISP) 六、迪米特法则(Law of Demeter, LoD) 总结 一、单一职责原则(Single Responsibility Principle) 定义:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有 可能会导致原本运行正常的职责P2功能发生故障。 单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中

工厂方法模式

南笙酒味 提交于 2020-03-07 03:03:16
目录 概念 实现原理 解决的问题 作用和意义 角色构成 抽象工厂(Creator)角色 具体工厂(Concrete Creator)角色 抽象产品(Product)角色 具体产品(Concrete Product)角色 UML类图 代码实现 抽象工厂 IPressFactory.java 具体工厂 HarvardPressFactory.java OxfordPressFactory.java 抽象产品 IBook.java 具体产品 HongLouBook.java SanGuoBook.java 客户端调用 FactoryMethodFirstDemo.java 工厂方法模式-控制台输出 概念 工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。 实现原理 工厂方法模式对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。 解决的问题 工厂方法模式是简单工厂模式的衍生或者说改进,解决了简单工厂模式存在的问题,友好地遵循了开闭原则,实现了可扩展

继 承(面向对象特征之二)

▼魔方 西西 提交于 2020-03-06 09:34:32
好处: 1 :提高了代码的复用性。 2 :让类与类之间产生了关系,提供了另一个特征多态的前提。 父类的由来:其实是由多个类不断向上抽取共性内容而来的。 java中对于继承,java只支持单继承。java虽然不直接支持多继承,但是保留了这种多继承机制,进行改良。 单继承:一个类只能有一个父类。 多继承:一个类可以有多个父类。 为什么不支持多继承呢? 因为当一个类同时继承两个父类时,两个父类中有相同的功能,那么子类对象调用该功能时,运行哪一个呢?因为父类中的方法中存在方法体。 但是java支持多重继承。A继承B B继承C C继承D。 多重继承的出现,就有了继承体系。体系中的顶层父类是通过不断向上抽取而来的。它里面定义的该体系最基本最共性内容的功能。 所以,一个体系要想被使用,直接查阅该系统中的父类的功能即可知道该体系的基本用法。那么想要使用一个体系时,需要建立对象。建议建立最子类对象,因为最子类不仅可以使用父类中的功能。还可以使用子类特有的一些功能。 简单说:对于一个继承体系的使用,查阅顶层父类中的内容,创建最底层子类的对象。 子父类出现后,类中的成员都有了哪些特点: 1 :成员变量。 当子父类中出现一样的属性时,子类类型的对象,调用该属性,值是子类的属性值。 如果想要调用父类中的属性值,需要使用一个关键字: super This : 代表是本类类型的对象引用。 Super :

Java自学笔记之抽象类(abstract)

﹥>﹥吖頭↗ 提交于 2020-03-06 03:25:24
抽象函数 抽象类概述:抽象就是看不懂的。 抽象类特点: 抽象类和抽象方法必须用 abstract 关键字修饰。 abstract class 类名 { } public abstract void test ( ) ; 抽象类不一定有抽象方法,有抽象方法的类不一定是抽象类或者是接口。 抽象类不能实例化,那么按照多态的方式,由具体子类实例化。这也是多态的一种,抽象类多态。 抽象类的子类要么是抽象类要么重写抽象类中的所有抽象方法 abstract class Hello { //抽象函数。 需要 abstract 修饰, 并以分号;结束 abstract void work ( ) ; } 抽象类成员的特点: 成员变量:既可以是变量,也可以是常量。 构造方法:抽象类是一个类,所以,它有构造方法,用于子类访问父类数据的初始化。 成员方法:既可以是抽象的,也可以是非抽象的。 abstract class People { public People ( ) { //构造方法 } String name = "张三" ; // 变量 final int NUM = 1 ; // 常量 abstract void test ( ) ; // 抽象方法 public void work ( ) { // 非抽象方法 System . out . println ( "上班....." ) ; }

实验二Java面向对象程序设计

扶醉桌前 提交于 2020-03-05 17:24:26
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1352 姓名:王国伊 学号:20135207 成绩: 指导教师:娄嘉鹏 实验日期:2015.5.8 实验密级:无 预习程度: 实验时间:15:30~18:00 仪器组次:07 必修/选修:选修 实验序号:02 实验名称: Java 面向对象程序设计 实验目的与要求: 1. 初步掌握单元测试和 TDD ; 2. 理解并掌握面向对象三要素:封装、继承、多态; 3. 初步掌握 UML 建模; 4. 熟悉 S.O.L.I.D 原则; 5. 了解设计模式。 实验仪器: 名称 型号 数量 PC机 Lenovo Z485 1 Linux虚拟机 Ubuntu(32bit) 1 实验步骤 一、单元测试 三种代码 编程是智力活动,不是打字,编程前要把干什么、如何干想清楚才能把程序写对、写好。当我们想用程序解决问题时,要会写三种码: 伪代码 产品代码 测试代码 需求:我们要在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。 伪代码: 产品代码: 测试代码: 经过几次修改后得到可以通过自己测试的代码,即能够实现需求的代码。 这时测试都符合预期了,我们把MyUtil.java提供给别人使用时,他人可以按照要求实现需求。为保证单元测度是充分的,我们的一般要求是测试代码要比产品代码多。 2