抽象方法

抽象方法与抽象类

做~自己de王妃 提交于 2019-11-29 05:06:36
package cn.learn.chouxiang; /* 抽象方法:就是在成员方法前加上abstract关键字,去掉大括号,分号结束 实际意义一般在父类表示某种东西的行为,但行为的发生情况不一样 抽象类:含有抽象方法的类必须是抽象类,抽象类中不必包含抽象方法 如何使用抽象类和抽象方法: 1.不能直接 new 抽象类,必须用子类继承抽象类 2.子类必须重写抽象类所有的抽象方法,不用再加abstract 3.子类来创建对象 注意:子类构造方法中会有默认super调用父类构造方法 没有抽象方法的抽象类,也不能直接new,设计模式中会使用得到 若最高抽象父类含该事物的所有抽象方法 但第一个继承的子类无法唯一区分父类的重写,可以仍为抽象类,重写父类的某一抽象方法,其余的抽象继续由下面的子类继续重写,以此类推 */ public abstract class Animals { public Animals(){ System.out.println("父类构造方法执行"); } //抽象方法 public abstract void eat(); } package cn.learn.chouxiang; public class Cat extends Animals { public Cat(){ //默认有个super调用父类的构造方法 System.out.println(

JavaScript 面向对象编程

℡╲_俬逩灬. 提交于 2019-11-29 05:01:59
面向对象介绍 什么是对象 Everything is object (万物皆对象) 对象到底是什么,我们可以从两次层次来理解。 (1) 对象是单个事物的抽象。 一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与远程服务器的连接也可以是对象。当实物被抽象成对象,实物之间的关系就变成了对象之间的关系,从而就可以模拟现实情况,针对对象进行编程。 (2) 对象是一个容器,封装了属性(property)和方法(method)。 属性是对象的状态,方法是对象的行为(完成某种任务)。比如,我们可以把动物抽象为animal对象,使用“属性”记录具体是那一种动物,使用“方法”表示动物的某种行为(奔跑、捕猎、休息等等)。 在实际开发中,对象是一个抽象的概念,可以将其简单理解为:数据集或功能集。 ECMAScript-262 把对象定义为:无序属性的集合,其属性可以包含基本值、对象或者函数。 严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都 映射到一个值。 <p class="tip"> 提示:每个对象都是基于一个引用类型创建的,这些类型可以是系统内置的原生类型,也可以是开发人员自定义的类型。 </p> 什么是面向对象 面向对象不是新的东西,它只是过程式代码的一种高度封装,目的在于提高代码的开发效率和可维护性。 面向对象编程 ——

java8函数式接口(Functional Interface)

会有一股神秘感。 提交于 2019-11-29 02:42:35
介绍 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 函数式接口可以被隐式转换为 lambda 表达式(箭头函数)。 函数式接口代表的一种契约, 一种对某个特定函数类型的契约。 Lambda表达式不能脱离上下文而存在,它必须要有一个明确的目标类型(interface),而这个目标类型就是某个函数式接口。 java8之前已经存在的函数式接口有很多,比如java.lang.Runnable、java.util.concurrent.Callable、java.util.Comparator等。 而新增加的函数式接口都在java.util.function包下。 Java 不会强制要求你使用 @FunctionalInterface 注解来标记你的接口是函数式接口, 然而,作为API作者, 你可能倾向使用@FunctionalInterface指明特定的接口为函数式接口, 这只是一个设计上的考虑, 可以让用户很明显的知道一个接口是函数式接口。 入门 先来看一个入门的例子就能明白为啥函数式接口是一种契约: @FunctionalInterface public interface Predicate<T> { //该接口有一个抽象方法test,它接受一个参数t,并且返回boolean //如此定义一个抽象方法,就是在约定

Java File类

纵饮孤独 提交于 2019-11-29 01:44:41
目录 Java File类 1. 概述 2. File类的静态成员变量 3. 路径 4. File类的构造方法 4. 常用方法 获取功能的方法 判断功能的方法 创建和删除功能的方法 5. 目录的遍历 6. 递归 概述 练习一:递归累加求和 练习二:递归求阶乘 练习三:递归打印多级目录 7. 综合案例 文件搜索 fileFilter的原理和使用(文件过滤器) 使用lambda表达式优化 Java File类 1. 概述 java.io.File类 文件和目录路径名的抽象表示形式。 java把电脑中的文件和文件夹(目录)封装成为了一个 File 类,我们可以使用File类对文件和文件夹进行操作。 我们可以使用 File 类的方法: 创建一个文件 / 文件夹 删除文件 / 文件夹 获取文件 / 文件夹 判断文件 / 文件夹 是否存在 对文件夹进行遍历 获取文件的大小 File类是一个与操作系统无关的类,任何的操作系统都可以使用这个类中的方法。 重点:记住三个单词 file:文件 directory:文件夹 / 目录 path:路径 2. File类的静态成员变量 static String pathSeparator:与系统有关的路径分隔符,为了方便,它被表示为一个字符串。 static char pathSeparatorChar :与系统有关的路径分隔符。 static String

Java8 实战读书笔记

爷,独闯天下 提交于 2019-11-28 20:44:33
Java8 实战 读书笔记 第一章 为什么要关心Java 8 要点 流处理 用行为参数化把代码传递给方法 并行与共享可变数据 外部迭代(需要手动调用for-each去一个个迭代) 内部迭代(迭代在库内进行,不需要手动调用for-each) Java 8 Stream API 解决了 集合处理时的套路 和 晦涩 ,以及 难以利用多核 。 使用 默认方法 ,在实现类没有实现方法是提供方法内容 第二章 通过行为参数化传递代码 概述 这章主要介绍由于不断变更需求带来工作量,以及使用行为参数化的方式来解决这种场景下的需求 通过行为参数化以及匿名类的配合使用使代码变得灵活继而引出lambda表达式的出现 关键词 谓词 :标准库定义了一类可以" 定制操作 "的算法函数,这类函数接收一个参数,这个参数与以往我们所认识的参数不同,它是一个可调用的对象,其返回结果是一个能作为条件的值,这个函数就是 谓词 ,换句话说,就是一个返回boolean值的函数,如下代码块所示,这个test抽象函数就是一个谓词。 public interface ApplePredicate{ boolean test (Apple apple); } 行为参数化 让方法接受多种行为作为参数(其方法定义该多种行为的接口)作为参数,并在内部使用,来完成不同的行为。 匿名类 匿名类的使用其实是为了方便行为参数化

工厂模式,从第三方登录说起

狂风中的少年 提交于 2019-11-28 20:11:40
现在的很多平台在登陆的时候,下面都会有一排选项,可以选择微信、QQ、微博账号等登陆,这些账号对平台来说都是第三方账号。第三方账号登陆是最近几年流行起来的,第三方账号登录一般都是基于 OAuth2.0 协议开发的。如果你不了解 OAuth2.0 协议,可以自行百度,也许会对你看这篇文章有所帮助。 现在由于公司要给平台引入流量,为了降低注册门槛,让更多的人来使用你们的平台,领导决定在你们的平台上接入第三方账号登陆功能。现阶段先接入微信、支付宝、QQ、GitHub 这四个第三方账号登陆。这个任务也顺利的落到你的头上,由于你了解 OAuth2.0 协议,你知道这个是一个固定的三段式操作,第一步获取 Authorization Code ,第二步获取 Access Token ,第三步调用信息接口,但是每个平台返回来的数据字段或者格式可能会不一样,所以你根据你的开发经验,为第三方账号登录模块抽取出来了一个 IdentityProvider 抽象类,该类主要有上面提到的三步需要的接口, IdentityProvider 类的代码如下: public abstract class IdentityProvider { // 获取Authorization Code abstract void authorizationCode ( ) ; // 获取 Access Token abstract

面向对象(三)

孤人 提交于 2019-11-28 19:49:31
抽象类   假如定义一个shape类,这个类提供一个计算周长的方法,但不同Shape子类对周长的计算方法都不一样。既然Shape类不知道如何实现计算周长的方法,干脆就不管了。但如果利用多态来对Shape引用变量指向子类对象方式,Shape变量无法调用计算周长的方法,必须将其强制类型转换为子类类型才可调用,这就降低了进程的灵活性。   Java提供了抽象方法让类包含某个方法又不需要提供方法具体实现。 抽象方法:方法必须使用abstract修饰符来修饰,抽象方法只能存在与抽象类中,但抽象类可以没有抽象方法。 (1) 抽象方法和抽象类规则 (1) 抽象类必须使用abstract修饰符修饰,抽象方法也必须使用abstract修饰符修饰, 抽象方法不能有方法体。 (2) 抽象类不能被实例化。 无法使用new关键字来调用抽象类的构造器创建抽象类的对象。 (3) 抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接口、枚举)。 抽象类的构造器不能用于创建对象,用于被其子类调用。 (4) 有抽象方法的类一定是抽象类。 ###(2) 抽象类如何被实例化 以多态的形式,由具体的子类实例化 123456789101112131415 abstract class Animal{ public abstract void eat();}class Cat extends

java 8 jdk1.8 新特性

核能气质少年 提交于 2019-11-28 19:16:31
1Lambda表达式 2函数式接口 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 java 8为函数式接口引入了一个新注解@FunctionalInterface 来源: https://www.cnblogs.com/wmxl/p/11421816.html

16-抽象类及接口

99封情书 提交于 2019-11-28 17:47:29
抽象类 如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰。这个抽象方法无法执行,因此这个类也必须申明为抽象类(abstract class) 抽象类本身被设计是只能用于被继承,强迫子类实现其定义的抽象方法。因此,抽象方法实际上相当于定义了“规范”。 //Person类定义了抽象方法run(),那么,在实现子类Student的时候,就必须覆写run()方法 public class Main { public static void main(String[] args) { Person p = new Student(); p.run(); } } abstract class Person { public abstract void run(); } class Student extends Person { @Override public void run() { System.out.println("Student.run"); } } 注意:父类Person的run()方法没有实际意义,也不能去掉父类的run()方法。去掉父类的run()方法,就失去了多态的特性。 面向抽象编程 当我们定义了抽象类Person,以及具体的Student、Teacher子类的时候

设计模式

纵饮孤独 提交于 2019-11-28 15:30:16
目录 一、创建型模式 1. 单例模式 1.1请手写一个单例 1.2单例模式的优点和应用? 1.3单例模式的缺点 2. 工厂类相关模式 2.1工厂模式、简单工厂模式、抽象工厂模式 2.2工厂模式的优点和应用 2.3工厂模式的不足 3、建造者模式 3.2建造者模式的优点和使用场景 3.3建造者模式的缺点 4、原型模式 4.1原型模式 4.2原型模式的优点和使用场景 4.3原型模式的缺点 二、结构类设计模式 1、适配器模式 1.1适配器模式 1.2适配器模式的优点和使用场景 2、桥接模式 2.1桥接模式 2.2桥梁模式的优点和应用场景 3、 装饰器模式 3.1对装饰器的理解 ,并写出一个计时器记录方法执行性能的装饰器? 3.2装饰器模式的优点和应用场景 3.3装饰器模式的缺点 4、组合模式 4.1组合模式 4.2组合模式的优点和使用场景 4.3组合模式的缺点 5、门面模式 5.1门面模式 5.3门面模式的缺点 6、享元模式 6.1享元模式 6.2享元模式的优点和使用场景 6.3享元模式的缺点 7、代理模式 7.1代理模式 7.2代理模式的优点和使用场景 7.3代理模式的缺点 三、行为类设计模式 1、策略模式 1.1策略模式 1.2策略模式的优点和应用场景 1.3策略模式的缺点 2、责任链模式 2.1责任链模式 2.2责任链模式的优点和应用场景 2.3责任链模式的缺点 3、 命令模式 3