抽象类

C# 面向对象之抽象类抽象方法

孤者浪人 提交于 2020-01-24 08:17:39
一、抽象 类 1.1、语法: 用abstract修饰类即为抽象类. 抽象类中可能包含抽象成员(方法,属性)这些都是共性的 【 可以为空,可以没有抽象成员,可以有 抽象成员 】 抽象类不能创建对象 【不能 实例化,不能New】 可以 被继承!可以创建数组 定义: 调用: 1.2、语义(了解): 抽象类表示一个抽象概念(数据和行为整体). 表达概念中拥有的共性行为数据. 抽象只表示做什么,拥有什么数据,但往往不表达具体做法,不表达数据具体取值 用于做基类,统一所有子类,管理子类 . 调用: 1.3 、什么时候适合用抽象类 》希望 做基类,对多个类进行统一管理【类将再分类】 》 使用抽象类的根本 原因(也是什么时候使用抽象方法) : 需求分析时找角色找共性时, 找的共性中 有 字段; 有方法, 方法中 有些方法 / 有些 行为 , 不同子类可能具体实现不同,父类中的这个行为就没必要实现!! 这个 行为需要写成抽象的,从而这个类也要变成抽象类。 二、抽象 方法 1》 定义:只有声明【定义】,没有实现的方法 就是抽象方法。 2》特点: 实现类 必须实现 所有 的抽象方法 B:A; 抽象方法 必须 放在抽象类中或者接口中。 但是 子类也是抽象,父类的抽象方法不实现可以吗? 可以。 3》 放在 抽象 类 中的抽象方法 必须 加 abstract 不能 私有 实现类实现 抽象方法的方法 必须 加

C#依赖注入实例

Deadly 提交于 2020-01-24 06:46:33
http://qing.weibo.com/tj/400082fa33001h7x.html 1.5 实现依赖注入1.5.1 背景介绍 设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系,变依赖具体为依赖抽象。平时开发中如果发现客户程序依赖某个(或某类)对象,我们常常会对它们进行一次抽象,形成抽象的抽象类、接口,这样客户程序就可以摆脱所依赖的具体类型。 这个过程中有个环节被忽略了——谁来选择客户程序需要的满足抽象类型的具体类型呢?通过后面的介绍你会发现很多时候创建型模式可以比较优雅地解决这个问题。但另一问题出现了,如果您设计的不是具体业务逻辑,而是公共库或框架程序,这时候您是一个“服务方”,不是您调用那些构造类型,而是它们把抽象类型传给您,怎么松散地把加工好的抽象类型传递给客户程序就是另一回事了。 这个情形也就是常说的“控制反转”,IOC:Inverse of Control;框架程序与抽象类型的调用关系就像常说的好莱坞规则:Don’t call me, I’ll call you. 参考Martin Fowler在《Inversion of Control Containers and the Dependency Injection pattern》一文,我们可以采用“依赖注入”的方式将加工好的抽象类型实例“注入”到客户程序中

scala快速入门系列【抽象类】

孤人 提交于 2020-01-24 04:55:11
本篇作为scala快速入门系列的第二十四篇博客,为大家带来的是关于 抽象类 的内容。 文章目录 抽象类 定义 抽象方法 抽象字段 抽象类 和Java语言一样,scala中也可以定义抽象类。 定义 如果类的某个成员在当前类中的定义是不包含完整的,它就是一个 抽象类 。 不完整定义有两种情况: 方法没有方法体( 抽象方法 ) 变量没有初始化( 抽象字段 ) 定义抽象类和Java一样,在类前面加上 abstract 关键字。 抽象方法 示例 设计4个类,表示上述图中的继承关系 每一个形状都有自己求面积的方法,但是不同的形状计算面积的方法不同 步骤: 创建一个Shape抽象类,添加一个area抽象方法,用于计算面积。 创建一个Square正方形类,继承自Shape,它有一个边长的主构造器,并实现计算面积方法。 创建一个长方形类,继承自Shape,它有一个长、宽的主构造器,实现计算面积方法。 创建一个圆形类,继承自Shape,它有一个半径的主构造器,并实现计算面积方法。 编写main方法,分别创建正方形、长方形、圆形对象,并打印它们的面积。 参考代码: 抽象字段 在scala中,也可以定义抽象的字段。如果一个成员变量没有初始化,我们就认为它是抽象的。 语法 示例 创建一个Person抽象类,它有一个String抽象字段WHO_AM_I 创建一个Student类,继承自Person类

了解Java程序之面向对象

怎甘沉沦 提交于 2020-01-24 01:10:29
面向对象 形式参数是引用类型和返回值是引用类型解析: 形式参数是基本类型对实际参数没有任何影响; 形式参数是引用类型: 具体类 :实际参数传递的是需要改具体类对象! 抽象类 :实际参数传递到的是需要改抽象类的子类对象 举例:jdk提供的Scanner类 构造方法 Scanner(InputStream source) public abstract class InputStream :抽象类 接口:实际参数需要传递的是该接口的子实现类的对象 举例: TreeSet 集合 public TreeSet(Comparator comparator) 构造方法中传递是一个接口类型:Comparato 接口 interface Work { void teach ( ) ; } //定义一个类 class TeacherDemo { public void function ( Work w ) { //形式参数是一个接口类型,需要传递该接口的子实现类对象 w . teach ( ) ; //Work w = new Teacher(); 接口多态的方式 } } //定义一个接口的子实现类 class Teacher implements Work { //重写teach(){} public void teach ( ) { System . out . println (

Java IO流学习总结

孤人 提交于 2020-01-23 19:50:10
Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流, 流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。 IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。 结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。 输入流和输出流 对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。 Java IO流对象 1.输入字节流InputStreamIO 中输入字节流的继承图可见上图,可以看出: InputStream 是所有的输入字节流的父类,它是一个抽象类。 ByteArrayInputStream、StringBufferInputStream

12. 抽象与密封

冷暖自知 提交于 2020-01-23 14:12:42
一、抽象类与抽象方法    1、抽象类与抽象方法声明 :   抽象类:在面向对象的概念中,所有的类都是通过对象来描述,但并不是所有的类都用来描述对象。如果一个类中没有足够的信息来描绘一个具体的对象,这样的类就是抽象类。   声明:他们都必须包含关键字 abstract ,并且抽象方法不能有方法体。抽象类中可以包含非抽象方法。   2、抽象类特性:   ( 1 )抽象类不能实例化,必须通过继承由派生类来实现其抽象方法。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。   ( 2 )抽象类的非抽象子类(即派生类)必须通过重载实现其继承的所有抽象方法和抽象服务器 。   3、抽象方法   ( 1 )抽象非是隐式的虚方法,只允许声明在抽象类中,不能使用static、private或virtual修饰符;   ( 2 )重写抽象方法时采用override 。   4、抽象方法和虚方法的区别:   虚方法有实现部分,并且派生类对其重写是可选的;抽象方法没有实现部分,并且强制非抽象派生类对其重写。   5、abstract修饰符   ( 1 )他可以和类、方法、属性、索引器及事件一起使用;   ( 2 )在类声明中使用 abstract 修饰符以表明这个类只能是其他类的基类;   ( 3 )他不能修饰静态方法或静态属性 。 二、密封类与密封方法   1、密封类   ( 1

C++学习笔记第三天:类、虚函数、双冒号

断了今生、忘了曾经 提交于 2020-01-23 09:16:36
类 class Box { public: double length; // 盒子的长度 double breadth; // 盒子的宽度 double height; // 盒子的高度 }; 类成员的作用域: public:公共成员。访问权限:外部、子类、本身 protected:受保护成员。访问权限:子类、本身 private:私有成员。访问权限:本身 构造函数 跟其他语言一样,使用类名作为函数名,无返回值,可以有参数。 #include <iostream> using namespace std; class Line { public: void setLength( double len ); double getLength( void ); Line(); // 这是构造函数 private: double length; }; // 成员函数定义,包括构造函数 Line::Line(void) { cout << "Object is being created" << endl; } void Line::setLength( double len ) { length = len; } double Line::getLength( void ) { return length; } // 程序的主函数 int main( ) { Line line; //

多态之抽象类

妖精的绣舞 提交于 2020-01-23 04:53:46
抽象类注意点 当父类中的方法不知道如何实现的时候,可以考虑将父类写成抽象类,将方法写成抽象方法。 抽象类标记abstract,抽象成员必须标记为abstract,并且不能有任何实现; 抽象成员必须在抽象类中,抽象类中可以有非抽象成员,用在继承; 抽象类不能实例化; 子类继承抽象类,必须将抽象类中的抽象成员重写; 实现代码 using System ; using System . Collections . Generic ; using System . Linq ; using System . Text ; using System . Threading . Tasks ; namespace _03抽象类 { class Program { static void Main ( string [ ] args ) { //狗狗会叫 猫咪也会叫\ //Animal] animal = new Animal();抽象类不可以实例化 Animal animal = new Dog ( ) ; animal . Bark ( ) ; //里面装的是Dog的对象; Dog dog = new Dog ( ) ; Cat cat = new Cat ( ) ; //抽象类和虚方法的区别:抽象类父类没实现,虚方法有实现方法; } public abstract class Animal

10_面向对象(类,抽象类,接口的综合练习、形参和返回值、包的概述和讲解、修饰符、内部类)

让人想犯罪 __ 提交于 2020-01-23 02:26:46
类、抽象类、接口的综合练习 1.形式参数和返回值的问题(理解) 2.包(理解) 3.导包(掌握) 4.权限修饰符(掌握) 5.常见的修饰符(理解) 6.内部类(理解) 作业 类、抽象类、接口的综合练习 /* 教练和运动员案例(学生分析然后讲解) 乒乓球运动员和篮球运动员。 乒乓球教练和篮球教练。 为了出国交流,跟乒乓球相关的人员都需要学习英语。 请用所学知识: 分析,这个案例中有哪些抽象类,哪些接口,哪些具体类。 整个分析过程,我是通过画图讲解的。 */ //定义一个说英语的接口 interface SpeakEnglish { //说英语 public abstract void speak(); } //定义人的抽象类 abstract class Person { private String name; private int age; public Person() {} public Person(String name,int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age;

java基础教程期末复习知识点

百般思念 提交于 2020-01-23 01:48:11
1. i++和++i的区别 i++是先赋值,然后再自增;++i是先自增,后赋值。 用代码表示就是: 若 a = i++; 则等价于 a=i;i=i+1; 而 a = ++i; 则等价于 i=i+1;a=i; 2. Java中的按位与(&)、按位或(|)、异或(^)等运算符 按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算。 运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1; 即:两位同时为“1”,结果才为“1”,否则为0 3. 运算符的优先级 关系运算(比较大小)优先于逻辑运算(&、||)且&&优先于|| 4. java的基本数据类型 5. 上转型 使用父类声明子类对象; 对于上转型对象,调用的是父类的静态方法和成员变量。(称为隐藏) 但是成员方法调用的是子类的。(称为覆盖) 6. super的用法 调用父类的构造方法 引用父类同名成员 super() 一般位于子类构造方法的第一行,相当于生成了一个父类对象。 7. abstract 抽象类 抽象类不能被实例化,只能作为父类。 抽象类中的抽象方法不写方法体,方法体由子类实现。 子类必须实现所有抽象方法。(接口也是) 理解:抽象类相当于制造了一个模板或者约定,去创建它的子类。 final 修饰 修饰变量时候相当于一个常量。 修饰类的时候,不过不希望一个类被继承,则声明该类为final类(最终类);