抽象类

Java课程预习5

纵然是瞬间 提交于 2020-03-08 23:04:41
方法的重写规则 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。 声明为 final 的方法不能被重写。 声明为 static 的方法不能被重写,但是能够被再次声明。 被重载的方法必须改变参数列表(参数个数或类型不一样),被重载的方法可以改变访问修饰符 多态存在的三个必要条件 继承 重写 父类引用指向子类对象 实例: public class Test { public static void main ( String [ ] args ) { show ( new Cat ( ) ) ; // 以 Cat 对象调用 show 方法 show ( new Dog ( ) ) ; // 以 Dog 对象调用 show 方法 Animal a = new Cat ( ) ; // 向上转型 a . eat ( ) ; // 调用的是 Cat 的 eat Cat c = ( Cat ) a ; // 向下转型 c . work ( ) ; // 调用的是 Cat 的 work } public static void show ( Animal a ) { a . eat ( ) ; // 类型判断 if ( a

简单工厂模式

亡梦爱人 提交于 2020-03-08 05:38:44
模拟一个简单的需求 设计一个简单的计算器,能够完成加减乘除的操作,并且能够设置运算的两个操作数(暂时不考虑计算器的界面)。 分析 思路1 可以创建一个计算器类,里面包含加减乘除的运算,以及设置获取操作数等操作,客户端直接创建一个计算器的对象,调用对应接口去执行运算。如果后续要添加新的运算,每次需要更改计算器类。 风险:由于新增操作每次要更改原来设计的类,可能会由于不小心改掉了原来的实现计算逻辑,从而导致原来正常运行的程序得不到正确的结果。 思路2 为每种运算单独设计一个类,客户端使用的时候可以根据不同的运算创建不同的对象,执行相应的操作。 由于每种运算符都有类似的操作,只是最终对数据执行的运算不一样,为了避免每个运算类写重复的代码,可以抽象出来一个运算类,包含公共的方法(设置操作数,获取操作数,获取计算结果等),具体运算类应该继承这个基类,在每个子类分别执行自己的运算。 此时,客户端需要使用运算器的时候,创建对象使用new的时候还是需要知道每个运算类的类名,若这些类分别在不同的头文件声明,使用这些类的时候还需要include一堆的头文件。如果要新增加运算符,上述的地方都要改动,很容易遗漏,非常的繁琐。 解决方案:由于创建的对象都是类似的对象(他们的父类都是同一个),可以创建一个类,提供一个静态方法,把创建具体类对象的工作都放到这个类中来完成,当客户端需要使用运算器的时候

每日刷题总结

橙三吉。 提交于 2020-03-08 03:57:49
1.根据以下代码段,下列说法中正确的是(C) public class Parent { private void m1 ( ) { } void m2 ( ) { } protected void m3 ( ) { } public static void m4 ( ) { } } A.子类中一定能够继承和覆盖Parent类的m1方法 B.子类中一定能够继承和覆盖Parent类的m2方法 C.子类中一定能够继承和覆盖Parent类的m3方法 D.子类中一定能够继承和覆盖Parent类的m4方法 解析: 通过继承,子类可以拥有所有父类对其可见的方法和域 A.私有方法只能在本类中可见,故不能继承,A错误 B.缺省访问修饰符只在本包中可见,在外包中不可见,B错误 C.保护修饰符凡是继承自该类的子类都能访问,当然可被继承覆盖;C正确 D.static修饰的成员属于类成员,父类字段或方法只能被子类同名字段或方法遮蔽,不能被继承覆盖,D错误 子父类可能不在同一个包中 2.given the following code,what will be the output?(A) class Value { public int i = 15 ; } public class Test { public static void main ( String argv [ ] ) { Test t =

一种专门用来作父类的类——抽象类

微笑、不失礼 提交于 2020-03-08 03:33:01
1.抽象类的声明: 1 abstract class Book 2 { 3 String name;//属性 4 int price; 5 public void printName()//普通方法 6 { 7 System.out.println("书名:"+name); 8 } 9 public abstract void printPrice();//抽象方法 10 } 2.抽象类不能直接实例化: Book book = new Book ();// 错误的, Book 是抽象类 3.抽象方法只需声明,不需实现: public abstract void printPrice( int price);// 抽象方法 4. 抽象类的使用 : 必须有子类。 抽象类的子类必须重写 全部 的抽象方法后才能被实例化。 1 abstract class Book 2 { 3 String name;//属性 4 int price; 5 String press; 6 public void printName(String name)//普通方法 7 { 8 System.out.print("书名:"+name); 9 } 10 public abstract void printPrice(int price);//抽象方法 11 } 12 class Readers

java基础概念

房东的猫 提交于 2020-03-07 19:39:02
基本含义 抽象类:规定一个或多个抽象方法的类别本身必须定义为abstract,抽象类只是用来派生子类,而不能用它来创建对象。final类:又称“最终类”,它只能用来创建对象,而不能被继承,与抽象类刚好相反,而且抽象类与最终类不能同时修饰同一个类。包:Java中的包是相关类和接口的集合,创建包须使用关键字package。继承:Java作为面向对象编程语言,支持继承这基本概念。但Java只支持单根继承,java.lang.Object是所有其他类的基类。多态类:在Java中,对象变量是多态的。而Java中不支持多重继承。接口:Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为。通用编程:任何类类型的所有值都可以同Object类型的变量来代替。封装:把数据和行为结合起在一个包中,并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field)。重载:当多个方法具有相同的名字而含有不同的参数时,便发生重载。编译器必须挑选出调用哪个方法进行编译。重写:也可称为方法的“覆盖”。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。值得注意的是

Java语言程序设计-第10版notes

半城伤御伤魂 提交于 2020-03-07 16:59:59
第1章 计算机、程序和Java概述 部分章节小结 1、编程错误可以分为三类:语法错误、运行时错误和逻辑错误。编译器报告的错误称为语法错误或者编译错误;运行时错误指引起程序非正常结束的错误;而当一个程序没有按照预期的方式执行时,产生逻辑错误 。 第2章 基本程序设计 部分章节小结 1、拓宽类型不需要显式转换,缩窄类型必须显式完成。 123456 int i=9;double d=i;//缩窄类型转换double d=9.0;int i=(int)d; 2、计算机科学中,1970年1月1日午夜零点为UNIX时间戳。 第3章 选择 部分章节小结 1、除开赋值操作符的所有二元操作符都是左结合的,赋值操作符是右结合的。(此处的结合指的是结合律) 123456 //以下两个表达等价a-b+c-d((a-b)+c)-d//以下两个表达等价a=b+=c=5a=(b+=(c=5)) 第4章 数学函数、字符和字符串 部分章节小结 1、字符 ‘ ‘ 、t、 f、 r 和 n 都称为空白字符。 2、字符可以基于它们的Unicode码使用关系操作符进行比较。 第6章 方法 部分章节小结 1、程序模块化和可重用性是软件工程的中心目标之一。 2、方法可以重载,这意味着两个方法可以拥有相同的方法名,只要它们的参数列表不同即可。 3、方法抽象是把方法的应用和实现分离,用户可以在不知道方法是如何实现的情况下使用方法

设计模式的六大原则

喜欢而已 提交于 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功能发生故障。 单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中

认识接口

左心房为你撑大大i 提交于 2020-03-07 08:40:50
一、接口的定义   接口的定义和类的定义很类似,分为接口生命和和接口体。   1、接口声明     和类不同的是,接口使用interface来声明自己是一个接口,格式如:     interface 接口的名字   2、接口体     接口体包含常量的声明(没有变量)和抽象方法两部分,接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量的访问权限一定都是public,而且是static,所有的抽象方法的访问权限一定都是public。 二、实现接口   1、类实现接口   接口由类来实现以便使用接口中的方法。用implements声明该类实现一个或多个接口。多个接口用逗号隔开。如A类实现Printable和Addable接口。   class A implements Printable,Addable   2、重写接口中的方法   如果一个非抽象类实现了某个接口,那么这个类必须重写这个接口中的所有方法,方法的权限必须为pubic来修饰。实现接口的非抽象类实现了该接口的方法,即给出了方法的具体行为功能。   抽象类既可以重写接口中的方法,也可以直接拥有接口中的方法。   3、接口的继承   接口也可以被继承,即可以通过关键字extends声明一个接口是另一个接口的子接口。由于接口中的方法和常量都是public的,子接口将继承父接口中的全部方法和常量。 三

C#学习(13)接口,抽象类,SOLID,单元测试,反射

烈酒焚心 提交于 2020-03-07 06:51:38
什么是接口和抽象类 接口和抽象类都是“软件工业产物” 具体类→抽象类→接口:越来越抽象,内部实现的东西越来越少 抽象类是未完全实现逻辑的类(可以有字段和非public成员,它们代表了“具体逻辑”),不可被实例化 抽象类为复用而生:专门作为基类来使用,也具有解耦功能 封装确定的,开放不确定的,推迟到合适的子类中去实现 接口是完全未实现逻辑的“类”(“纯虚类”;只有函数成员;成员全部public) 接口为解耦而生:“高内聚,低耦合”,方便单元测试 接口是一个“协约”,早已为工业生产所熟知(有分工必有协作,有协作必有协约) 他们都不能实例化,只能用来声明变量,或引用具体类的实例 为做基类而生的“抽象类”与“开放/关闭原则” 抽象类: namespace Class { class Program { static void Main ( string [ ] args ) { Vehicle v = new RaceCar ( ) ; v . Run ( ) ; } } abstract class Vehicle { public abstract void Run ( ) ; public void Fill ( ) { Console . WriteLine ( "Pay and fill" ) ; } public void Stop ( ) { Console .

javaI/O流基础

为君一笑 提交于 2020-03-06 22:24:37
I/O流概述 辅助类:File 文件对象的建立File fp = new file(“tempfile”) 字节流:fileinputstream类用来打开一个输入文件。 字节流:fileoutputstream类用来打开一个输出文件 字节流 InputStream,OutputStream//抽象类,基类,单元为Unicode字符,用于读写文本 DataOutputStream/DataInputStream//数据输入输出流,当文件流或者缓冲区的处理对象是字节或者字节数组。 字符流 Reader, Write//抽象类,基类 FileReader/FileWriter,//字符输入输出流 缓冲流 BufferedReader/BufferedWriter 来源: https://www.cnblogs.com/innndown/p/12431296.html