抽象类

IO流之字节流

无人久伴 提交于 2020-02-02 13:34:23
字节流 字节输出流 OutputStream OutputStream 此抽象类 , 是表示输出字节流的所有类的超类 。操作的数据都是字节,定义了输出字节流的基本共性功能方法 因为是抽象类 不能new 所有我们一般使用的都是他的子类 FileOutputStream 类 FileOutputStream 类 OutputStream 有很多子类,其中子类 FileOutputStream 可用来写入数据到文件。 FileOutputStream 类 ,即 文件输出流 , 是用于将数据写入 File 的输出流。 注意:构造方法里有续写开关 输入ture是开始续写 默认的时候都是false 给文件换行和io异常的处理 字节输入流 InputStream 我们通过 InputStream 可以实现。 InputStream 此抽象类 , 是表示字节输入流的所有类的超类 。,定义了字节输入流的基本共性功能方法 因为是抽象类 所以我们一般使用他的子类 FileInputStream 类 FileInputStream 类 InputStream 有很多子类,其中子类 FileInputStream 可用来读取文件内容。 FileInputStream 从文件系统中的某个文件中获得输入字节。 FileInputStream 类读取数据 read 方法 有两种方法一种是一个字节一个字节的读取

设计模式之设计原则

百般思念 提交于 2020-02-02 09:57:55
设计模式是为了让程序具有更好的 1、代码重用,不多次编写 2、可读性:编码规范,便于阅读与理解 3、可扩展性:易于增加新的功能 4、可靠性:增加新功能,对原来的功能没有影响 5、高内聚,低耦合 一、单一职责原则 应该有且只有一个原因引起类的变更。 即一个类或者接口的职责应该单一(业务逻辑层面) 最佳实践 1、接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化 二、里氏替换原则 有2种定义 1、如果对每个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都替换为o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型 2、所有引用基类的地方必须能够透明地使用其子类的对象 通俗地将,就是只要父类能出现的地方,子类都可以出现,而且替换为子类对象也不会产生任何错误或异常 最佳实践 1、项目中采用里氏替换原则,尽量避免子类的“个性”,即子类独特的属性和方法 三、依赖倒置原则 包含三层含义: 1、高层模块不应该依赖低层模块,两者都应该依赖其抽象 2、抽象不应该依赖细节 3、细节应该依赖抽象 在Java中,抽象指的是接口或者抽象类,两者都是不能被实例化的,细节就是实现类,实现接口或者继承抽象类产生的类就是细节,可以被实例化。 所以上面三层含义可以理解为 1、模块之间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系通过接口或者抽象类产生

interface关键字和抽象类与接口有哪些异同

青春壹個敷衍的年華 提交于 2020-02-02 03:53:30
interface关键字 1.接口使用interface来定义 2.Java中,接口和类是并列的两个结构 3.如何定义接口:定义接口中的成员 JDK7及以前:只能定义全局常量和抽象方法 全局常量:public static final的.但是书写时,可以省略不写 抽象方法:public abstract的 JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法(下面单独介绍) 4.接口中不能定义构造器的!意味着接口不可以实例化 5.Java开发中,接口通过让类去实现(implements)的方式来使用. 如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化 如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类 6.Java类可以实现多个接口 —>弥补了Java单继承性的局限性 格式:class AA extends BB implements CC,DD,EE 7.接口与接口之间可以继承,而且可以多继承 8.接口的具体使用,体现多态性 9.接口,实际上可以看做是一种规范 接口的匿名实现类的对象 public class USBTest { public static void main ( String [ ] args ) { Computer com = new Computer ( ) ; //1.创建了接口的非匿名实现类的非匿名对象

java基础面试题(三)

99封情书 提交于 2020-02-02 03:05:58
Integer 与 int 有什么区别? 答:Integer是引用数据类型,默认值是null。int是基本数据类型,默认值是0。Integer是int的封装类,提供了一些操作数据的方法。 作用域 public,private,protected,以及default有什么区别? 作用域 当前类 同一package 子类 其他package public √ √ √ √ protected √ √ √ × default √ √ × × private √ × × × String,StringBuffer和 StringBuilder使用equals()方法比较对象有什么区别? 直接上代码测试: public class TestMain { public static void main ( String [ ] args ) throws Exception { String a = new String ( "TEST" ) ; String b = new String ( "TEST" ) ; System . out . println ( a . equals ( b ) ) ; StringBuffer stringBuffer = new StringBuffer ( "TEST" ) ; StringBuffer stringBuffer1 = new

抽象类和接口

半城伤御伤魂 提交于 2020-02-02 00:02:10
抽象类(abstract) 包含一个抽象方法的类必须是抽象类 抽象类和抽象方法都是用abstract关键字声明 抽象方法只需要声明而不需要实现 抽象类必须被子类继承 子类不是抽象类时必须重写父类中的所有抽象方法 子类是抽象类时仍可以继续声明成抽象方法 public abstract class Hero{ public abstract boolean canFight(Hero hero); public abstract void fight(Hero hero); } /** 子类不是抽象类*/ public class Worrior extends Hero{ @Overrride public boolean canFight(Hero hero){ return false; } @Override public void fight(Hero hero){} } /** 子类是抽象类*/ public abstract class LongRangerHero extends Hero{ //继续作为抽象方法,也可以省略 public abstract void fight(Hero hero); @Override public boolean canFight(Hero hero){ return true; } } /** 子类不是抽象类*/ public

八、接口

谁都会走 提交于 2020-02-01 18:22:00
一、请问接口的含义是什么? 答:①实实在在的接口类型;②系统对外提供的服务。 二、请问接口的特征是什么? 答:①接口中的成员变量默认都是public,static,final类型的,必须被显式初始化。 ②接口中的方法默认都是public,abstract的。 ③在jdk8以前的版本,接口只能包含抽象方法。从jdk8开始,允许在接口中定义默认方法和静态方法。接口的实现类既可以直接访问默认方法,也可以覆盖它,重新实现方法。 ④接口没有构造方法,不能被实例化。 ⑤一个接口不能实现另一个接口,但它可以继承多个其他接口。 ⑥一个类只能继承一个直接的父类,但能实现多个接口。 三、请问抽象类与接口的相同点和区别是什么? 答:相同点: ①都不能被实例化; ②都能包含抽象方法,这些抽象方法用于描述系统能提供哪些服务,但不必提供具体的实现。 ③从jdk8版本开始,不仅抽象类能为部分方法提供默认的实现,接口也具有该特性。该特性可以避免在子类或者实现类中重复实现方法,这能提高代码的可重用性。 不同点: ①接口中的成员变量只能是public,static,final类型的,而在抽象类中可以定义各种类型的实例变量和静态变量。 ②一个类只能继承一个直接的父类;但一个类可以实现多个接口。 四、请问与接口相关的设计模式是什么? 答:①定制服务模式; ②适配器模式; ③代理模式; 来源: CSDN 作者: 婷婷周

第五章简易笔记

一笑奈何 提交于 2020-02-01 17:12:25
第五章-继承 1. 继承已存在的类就是复用(继承)这些类的方法和域。在此基础上,还可以添加一些新的方法和域,以满足新的需求。 2.反射是指在程序运行期间发现更多的类及其属性的能力。 3.在java中所有继承都是公有继承。 4. 在子类中可以增加域、增加方法或覆盖超类的方法,然而绝对不能删除继承的任何域和方法。 5.this与super关键字用途总结: this用途: (1)引用隐式参数; (2)调用该类其他的构造器。 super用途: (1)调用超类方法; (2)调用超类构造器。 6.调用构造器的语句只能作为另一个构造器的第一条语句出现。构造器参数既可以传递给本类(this)的其他构造器,也可以传递给超类(super)的构造器。 7.一个对象变量可以指示多种实例类型的现象被称为多态,在运行时能够自动的选择调用哪个方法的现象称为动态绑定。 8.java不支持多继承。 9.在java中,对象变量是多态的。一个Employee变量既可以引用一个Employee类对象,也可以引用一个Employee类的任何一个子类对象。 10.不能将超类的引用赋给子类对象。例如:Manager m = staff[i];//error 原因:不是所有的雇员都是经理。 11. 动态绑定(弄清对象的执行过程): 1) 编译器查看对象的声明类型和方法名

Java核心技术第五章——1.类、超类、子类(2)

末鹿安然 提交于 2020-02-01 17:10:35
继上一篇 Java核心技术第五章——1.类、超类、子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法。 2.编译器将查看调用方法提供的参数类型(args)。 3.根据参数类型匹配所有名为Method的方法。 4.如果编译器没有找到与参数类型匹配的方法,或者发现经过类型转换后有多个方法与之匹配,就会报告一个错误。 7.阻止继承:final类和方法。 1.final类:当你不希望别人利用某个类定义子类。那么则使用final去修饰类。此类则不允许扩展,称为final类。(final类的方法默认为final方法) 2.final方法:类中的方法也可以被声明为final。如果这样做,那么子类就不能覆盖这个方法(前提不是final类) 8.强制类型转换 例如 : double x = 6.66; int nx = (int) x; //转换成功 此表达式x的值转成整数类型,舍弃了小数部分。 例如: List<Object> obj = new ArrayList(); obj.add("hello"); obj.add(666); int i = (Integer)obj.get(0);//error 类型转换错误 ClassCastException 假如你不清楚obj数组引用的对象

计算机语言之java基础知识二

不想你离开。 提交于 2020-02-01 16:17:20
语法糖 问:Java 中语法糖原理、解语法糖? 答: 语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法。语法糖的存在主要是方便开发人员使用。但其实,Java 虚拟机并不支持这些语法糖,这些语法糖在编译阶段就会被还原成简单的基础语法结构,这个过程就是解语法糖。Java 中最常用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。 语法糖:switch 支持 String 与枚举、泛型、自动装箱与拆箱、方法变长参数、枚举、内部类、条件编译、 断言、数值字面量、for-each、try-with- 问:resource、Lambda 表达式? 答:从 Java 7 开始,Java 语言中的语法糖在逐渐丰富,其中一个比较重要的就是 Java 7 中switch开始支持String。泛型需要在编译阶段通过类型擦除的方式进行解语法糖,虚拟机中没有泛型,只有普通类和普通方法,所有泛型类的类型参数在编译时都会被擦除,泛型类并没有自己独有的Class类对象。比如并不存在List<String>.class或是List<Integer>.class,而只有List.class。枚举类型不能被继承。内部类之所以也是语法糖,是因为它仅仅是一个编译时的概念。 static 问:”static

Scala 学习(6)之「对象」

大兔子大兔子 提交于 2020-02-01 14:50:02
目录 object 伴生对象 继承抽象类 apply方法 main方法 用 object 来实现枚举功能 object 相当于 class 的单个实例,通常在里面放一些静态的 field 或者 method,第一次调用 object 的方法时,就会执行 object 的 constructor,也就是 object 内部不在 method 中的代码,需要注意的是,object 不能定义接受参数的 constructor object 的 constructor 只会在其第一次被调用时执行一次,以后再调用就不会再次执行了 object 通常用于单例模式的实现,或者放 class 的静态成员,比如工具方法 object,通常在里面放一些静态的 field 或者 method object People { private var mouthNum = 1 println("this People object!") def getMouthNum = mouthNum } People.getMouthNum 执行程序之后可以看到,构造方法只被调用了一次。 伴生对象 如果一个程序中,如果有一个 class,还有一个与 class 同名的 object,那么就称这个 object 是 class 的伴生对象, class 是 object 的伴生类 伴生类和伴生对象必须存放在一个