抽象方法

解决extension methods are not supoorted at language level '1.5'问题

我们两清 提交于 2020-01-10 13:58:34
一、问题 接口新增抽象方法时,为了使已经在使用该接口的实现类不出错,需要把该抽象方法写成默认方法,但过程中IDEA报错:extension methods are not supoorted at language level ‘1.5’ 二、解决方法 打开 File --> Project Stucture 选择项目设置Lanugage level, 如下图所示: 2、打开 File --> Settings --> Compiler --> Java Compiler设置Project bytecode version;同时修改项目对应的Pre-module bytecode version。 如下图所示: 3、完成即可 来源: CSDN 作者: XINGHUAHUO123 链接: https://blog.csdn.net/XINGHUAHUO123/article/details/103922262

[Day22]IO(File、递归)

╄→尐↘猪︶ㄣ 提交于 2020-01-10 10:55:33
1.File   1.1 IO概述   (1)当需要把内存中的数据存储到持久化设备上的这个动作称为输出(写)Output操作   (2)当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作   1.2 File类-Java中把文件或目录(文件夹)都封装成 File对象   1.3 File类的构造函数   (1) File(File parent,String child)   根据parent抽象路径名和child路径名字符串创建一个新File实例   (2) File(String pathname)    通过将给定路径名字符串转换为抽象路径名来创建一个新File实例   (3) File(String parent,String child)   根据parent路径字符串和child路径名字符串创建一个新File案例   1.4 File类的获取   (1) String  getAbsolutePath()   返回此抽象路径名的绝对路径名字符串   (2) String  getName()   返回由此抽象路径名表示的文件或目录的名称   (3) String  getPath()   将此抽象路径名转换为一个路径名字符串   (4) long  length()   返回由此抽象路径名表示的文件的长度   1.5 文件和文件夹的创建删除等   

常用类

不问归期 提交于 2020-01-10 04:01:09
包装类 Java是面向对象的语言,但不是纯面向对象,我们常用到的基本数据类型就不是对象,实际应用中需要把基本数据转化成对象。为了解决这个不足,Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类。 1.八大包装类只有char和int的包装类名跟基本数据类型不同 2.八个类中,除了Character和Boolean以外,其他的都是“数字型”,数字型”都是java.lang.Number的子类。Number类是抽象类,因此它的抽象方法,所有子类都需要提供实现。Number类提供了抽象方法:intValue()、longValue()、floatValue()、doubleValue(),意味着所有的“数字型”包装类都可以互相转型。 测试Integer的用法 public class Test00 { void testInteger ( ) { // 基本类型转化成Integer对象 Integer int1 = new Integer ( 10 ) ; Integer int2 = Integer . valueOf ( 20 ) ; // 官方推荐这种写法 // Integer对象转化成int int a = int1 . intValue ( ) ; // 字符串转化成Integer对象 Integer int3 =

C#基础--继承与多态

二次信任 提交于 2020-01-10 02:43:20
面向对象三大特性:封装,继承与多态,这里讲一下后两个特性。 继承 继承:指一个对象延续另一个对象的特征(属性和方法),并且有自己的个性特征(属性和方法)。 必要性:代码复用,避免重复;一处更新,处处更新。与封装不同的是,封装主要是封装一个方法、一个类,使用时直接调用不能更改;继承主要讲需要的属性和方法(主要是方法)进行“封装”,且要使用时还可以继续扩展自己的特性(继续增加、修改方法--方法重写)。 使用广泛:C#里,Object类是所有类的基类,winform里面所有控件都继承于Control类。 父类与子类:当A继承于B时,A是子类(或叫派生类),B是父类(或叫基类或超类)。 传递性:A→B,B→C,C具有A的特性。 单根性:一个子类只能有一个父类,一个父类可以有若干子类。 protected:只有父类与子类才能访问。 sealed:密封类,不允许有子类,有利于保护知识产权。 父类与子类关系:父类完全包含于子类,子类完全包含父类: 举例说明一下继承的好处 需求说明: 设计玩具猫、玩具狗相关程序,要求: 属性:姓名,自身颜色,自己类别,喜好食物 动作:自我介绍,跳舞,赛跑 常规实现: Models--Cat 1 namespace InheritanceTest 2 { 3 class Cat 4 { 5 public string Name { get; set; } 6

JAVA学习第十二天

余生长醉 提交于 2020-01-08 23:18:46
抽象类 针对一个事物,如果这个事物并不是具体事物,而是概括性的(需要抽象修饰这个类),比如动物,应该定义不应该定义具体类 class Animal{},并且动物的eat()/sleep()每个具体动物吃和睡不同的,所以这些功能应该声明(方法不能方法主体) 将当前这个类定义为抽象类! 抽象类的特点: 抽象类不能实例化!(不能创建对象) 注意事项: 1)如果一个类中有抽象方法,那么这个类一定是抽象类 2)抽象类中一定是抽象方法吗? 不一定都是抽象方法,可以是非抽象的,也可以抽象的! 3)抽象类的子类是抽象类还是非抽象类呢? 子类是抽象类的情况: 一般情况没有意义的! 父类已经不能实例化(抽象了) 应该采用的父类引用指向子类对象 例如:Animal a = new Cat() ; 子类已经抽象了,无法实例化 抽象类其他特点: 抽象类成员特点: 成员变量 既可以是变量也可以是常量 成员方法: 既可以是抽象的(子类必须重写),也可以是非抽象的 构造方法: 抽象类中是可以存在构造方法(无参/有参),作用:对该类对象的数据进行构造初始化 abstract跟哪些关键字冲突 private:私有的,外界不能访问的,被private修饰的方法不能被继承 final :状态修饰符 被final修饰的成员方法,不能被重写,而抽象类中的抽象方法必须让子类重写这个功能! static:静态,跟类相关

王道JAVA随堂笔记

ⅰ亾dé卋堺 提交于 2020-01-08 09:59:41
DAY 9 一、多态 1.多态是什么 多态是某一个事物在不同时刻或者不同条件下表现出来的不同状态。 java语言中的多态:“同一个对象”的行为(方法),在不同的时刻或条件下,表现出不同的效果。 2.多态的发生 多态的发生条件: 继承(多态一定要继承行为) 子类,一定要覆盖父类中,要发生多态的方法(行为) 父类引用指向子类实例 3.多态 多态: 编译时多态(方法重载): 2. 运行时多态:今天所讲的多态 4.多态中成员访问的特点 成员属性和成员方法: 编译看左边 : 引用变量的类型,规定了我们通过引用变量能访问到的对象的成员 运行看右边 : 究竟实际执行的方法 多态的优缺点 优点: 解决代码冗余的问题 使我们的程序可扩展性更好 缺点: 多态不能访问子类特有的方法 (为了解决多态无法访问子类特有的方法,我们可以使用向上转型和向下转型。) 为了保证向下转型是安全的,这里我们采用 instanceof 来判断当前对象是否是当前类的对象。 instanceof语法:对象名 instanceof 类名 返回值是boolean型; **注意:**null instanceof 任意类型结果都是false 二、抽象类 1.引入 当一个方法只有方法声明的时候,也就意味着它没有具体的方法实现,——> 抽象方法 必须使用abstract关键字来定义 2. 当一个类中包含了抽象方法

GOF 23设计模式之(行为型模式二)

北城以北 提交于 2020-01-07 12:41:54
目录 1.中介者模式 2.迭代器模式 3.访问者模式 4.备忘录模式 5.解析器模式 一、中介者模式(Mediator)   定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,可以独立地改变他们之间的交互。又叫调停模式,是迪米特法则的典型应用。      核心角色:   (1)抽象中介者角色(Mediator):提供同事对象注册与转发同事对象信息的抽象方法。   (2)具体中介者角色(Concrete Mediator):实现中介者接口,定义一个List来管理同事对象,协调各个同事角色之间的交互关系,因此依赖于同事角色。   (3)抽象同事类角色(Colleague):定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。   (4)具体同事类角色(Concrete Colleague):抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。   优点:   (1)降低对象之间的耦合性,使得对象易于独立地被复用。   (2)将对象间的一对多关联,转变为一对一的关联,提高系统的灵活性。      缺点:   (1)当同事类太多,中介者的职责将很大,会变得复杂而庞大,系统难于维护。    public class textMediator { public static void main

IHostingEnvironment VS IHostEnvironment - .NET Core 3.0中的废弃类型

江枫思渺然 提交于 2020-01-07 08:16:06
原文: https://andrewlock.net/ihostingenvironment-vs-ihost-environment-obsolete-types-in-net-core-3/ 作者: Andrew Lock 译者: Lamond Lu 本篇是 如何升级到ASP.NET Core 3.0 系列文章的第二篇。 Part 1 - 将.NET Standard 2.0类库转换为.NET Core 3.0类库 Part 2 - IHostingEnvironment VS IHostEnvironment - .NET Core 3.0中的废弃类型(本篇) Part 3 - 避免在ASP.NET Core 3.0启动时注入服务 Part 4 - 将终端中间件转换为ASP.NET Core 3.0中的节点路由 Part 5 - 将集成测试的转换为NET Core 3.0 在本篇博客中,我将描述与之前版本相比,ASP.NET Core 3.0中已经被标记为废弃的类型。我将解释一下为什么这些类型被废弃了,它们的替换类型是什么,以及你应该什么时候使用它们。 ASP.NET Core与通用主机(Generic Host)合并 在ASP.NET Core 2.1中引入了新的通用主机(Generic Host), 它是借助 Microsoft.Extension.*

GOF 23设计模式之(创建型模式)

倖福魔咒の 提交于 2020-01-06 21:52:25
目录 1.单例模式 1.1饿汉模式 1.2懒汉模式 1.3其他单例模式 2.原型模式 2.1 浅克隆 2.2深克隆 3.工厂模式 3.1简单工厂模式 3.2工厂方法 4.抽象工厂模式 5.建造者模式 一、单例模式(Singleton)   保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。   优点:由于只生成一个实例,减少了系统性能开销。可以在系统中设置全局的访问点,优化环境共享资源访问。如:可以设置一个单例类,负责所有数据表的映射处理。   常见的单例模式:     饿汉模式(线程安全,调用效率高,不能延迟加载)(主要)     懒汉模式(线程安全,调用效率不高,可以延迟加载)(主要)     双重检测锁(由于JVM底层内部模型原因,偶尔会出现问题,不推荐使用)     静态内部类式(线程安全,调用效率高,可以延迟加载)     枚举单例(线程安全,调用效率高,不能延迟加载)   单例模式UML图:       (1) 饿汉模式     问题:如果只是加载本类、不调用本类的getInstance()方法,或永远不调用本类。就会造成资源的浪费。 class eh{ //(1)直接创建私有实例对象 private static final eh texteh = new eh(); //(2)私有无参的构造函数 private eh() {} //(3

JavaScript设计模式-工厂模式

一个人想着一个人 提交于 2020-01-06 14:16:56
作者 | Jeskson 掘金 | https://juejin.im/user/5a16e1f3f265da43128096cb 什么是工厂模式,场景为你去买饺子吃,直接点餐,不用自己做,而餐厅要做好饺子(包饺子过程),做好直接卖给客户。 class Product{ constructor(name) { this.name = name } init() { alert('init') } da1() { alert('da1') } da2() { alert('da2') } } class Creator { create(name) { return new Product(name) } } 生成工厂 let creator = new Creator(); // 生成工厂实例 let p = creator.create('p1') p.init() p.da1() jquery class jquery { constructor(selector) { let slice = Array.prototype.slice let dom = slice.call(document.querySelectorAll(selecotr)) let len = dom ? dom.length : 0 for(let i = 0; i<len; i++) { this