抽象方法

05-封装、继承和多态

偶尔善良 提交于 2019-12-06 05:42:33
                封装、多态和继承  封装 原则: 将属性隐藏起来,若需要访问某个属性需要提供公共方法对其访问。(方法是一种封装,private关键字也是一种封装) private关键字 private是一个权限修饰符,代表最小权限 可以修饰成员变量和成员方法 被private修饰的成员变量或成员方法只能在别类中使用 this关键字 this代表所在类的当前引用(地址值),即对象自己的引用 private String name; public void setName(String name){ this.name = name; } 通过谁调用的方法谁就是this 构造方法 当一个对象被创建的时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。 修饰符 构造方法 (参数列表){ //构造方法名必须和所在的类名称(包括大小写)完全一样;无返回值 //方法体 } // 无参数构造方法 public Student() {} // 有参数构造方法 public Student(String name,int age) { this.name = name; this.age = age; } //不自定义有参构造方法时默认具有无参构造;一旦自定义了构造了有参构造方法,则必须新建无参构造方法就才能调用无参构造器 继承 继承:子类继承父类(父类、超类)的属性和行为

C#多态

跟風遠走 提交于 2019-12-06 05:25:22
1.1什么是虚方法? 在父类中使用 virtual 关键字修饰的方法, 就是虚方法。在子类中可以使用 override 关键字对该虚方法进行重写。 Virtual方法也可以单独执行。 1.2虚方法语法 父类: public virtual 返回值类型 方法名() { 方法体代码; } 子类: public override 返回值类型 方法名() { 方法体代码; } class CatType { public virtual void Cry() { Console.WriteLine("深呼吸,张开嘴巴,开始:"); } } class Cat:CatType { public override void Cry() { base.Cry(); Console.WriteLine("喵喵喵"); } } class Tiger:CatType { public override void Cry() { base.Cry(); Console.WriteLine("咆哮"); } } 1.3.虚方法使用细节 ①将父类的方法标记为虚方法, 就是在父类方法的返回值前加 virtual 关键字,表示这个方法可以被子类重写。 ②子类重写父类方法, 在子类的方法的返回值前加 override 关键字。 ③父类中的虚方法, 子类可以重写, 也可以不重写。 ④父类中用 virtual

抽象类与接口

女生的网名这么多〃 提交于 2019-12-06 04:56:27
原文转载: https://blog.csdn.net/qq_41933748/article/details/82670072 含有abstract修饰符的class即为抽象类,abstract 类不能创建实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。 接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。 下面比较一下两者的语法区别: 1.抽象类可以有构造方法,接口中不能有构造方法。 2.抽象类中可以有普通成员变量,接口中没有普通成员变量 3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。 4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public

一个没有抽象方法的抽象类有什么意义?

北城以北 提交于 2019-12-06 04:44:06
含有抽象方法的类一定是抽象类,但是抽象类不一定含有抽象方法。 如果一大堆东西 它们都有共同的概念,这个共同的概念本身没有现实的存在,把这些概念集合起来归为一个类,就可以是一个抽象类。 至于抽象类有没有方法,取决于这一大堆东西有没有共同的行为,如果它们只是有着相同的本质,但是没有共同的行为,这也是合情合理的。 来源: https://www.cnblogs.com/liqking/p/11962474.html

设计模式之美学习(四):面向对象相比面向过程有哪些优势?面向过程真的过时了吗?

柔情痞子 提交于 2019-12-06 03:28:31
除了面向对象之外,被大家熟知的编程范式还有另外两种,面向过程编程和函数式编程。面向过程这种编程范式随着面向对象的出现,已经慢慢退出了舞台,而函数式编程目前还没有被广泛接受。 在工作中,很多人搞不清楚面向对象和面向过程的区别,总以为使用面向对象编程语言来做开发,就是在进行面向对象编程了。而实际上,他们只是在用面向对象编程语言,编写面向过程风格的代码而已,并没有发挥面向对象编程的优势。这就相当于手握一把屠龙刀,却只是把它当作一把普通的刀剑来用,相当可惜。 什么是面向过程编程与面向过程编程语言? 我们可以对比着面向对象编程和面向对象编程语言这两个概念,来理解面向过程编程和面向过程编程语言。还记得之前是如何定义面向对象编程和面向对象编程语言的吗?让我们一块再来回顾一下。 面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石 。 面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。 类比面向对象编程与面向对象编程语言的定义,对于面向过程编程和面向过程编程语言这两个概念,给出下面这样的定义。 面向过程编程也是一种编程范式或编程风格。它以过程(可以为理解方法、函数、操作)作为组织代码的基本单元,以数据(可以理解为成员变量、属性

设计模式之美学习(四):面向对象相比面向过程有哪些优势?面向过程真的过时了吗?

强颜欢笑 提交于 2019-12-06 03:28:25
除了面向对象之外,被大家熟知的编程范式还有另外两种,面向过程编程和函数式编程。面向过程这种编程范式随着面向对象的出现,已经慢慢退出了舞台,而函数式编程目前还没有被广泛接受。 在工作中,很多人搞不清楚面向对象和面向过程的区别,总以为使用面向对象编程语言来做开发,就是在进行面向对象编程了。而实际上,他们只是在用面向对象编程语言,编写面向过程风格的代码而已,并没有发挥面向对象编程的优势。这就相当于手握一把屠龙刀,却只是把它当作一把普通的刀剑来用,相当可惜。 什么是面向过程编程与面向过程编程语言? 我们可以对比着面向对象编程和面向对象编程语言这两个概念,来理解面向过程编程和面向过程编程语言。还记得之前是如何定义面向对象编程和面向对象编程语言的吗?让我们一块再来回顾一下。 面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石 。 面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。 类比面向对象编程与面向对象编程语言的定义,对于面向过程编程和面向过程编程语言这两个概念,给出下面这样的定义。 面向过程编程也是一种编程范式或编程风格。它以过程(可以为理解方法、函数、操作)作为组织代码的基本单元,以数据(可以理解为成员变量、属性

设计模式之美学习(三):封装、抽象、继承、多态分别可以解决哪些编程问题?

主宰稳场 提交于 2019-12-06 03:28:01
理解面向对象编程及面向对象编程语言的关键就是理解其四大特性:封装、抽象、继承、多态。不过,对于这四大特性,光知道它们的定义是不够的,我们还要知道每个特性存在的意义和目的,以及它们能解决哪些编程问题。 封装(Encapsulation) 封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据。 对于封装这个特性,我们需要编程语言本身提供一定的语法机制来支持。这个语法机制就是 访问权限控制 。 private 、 public 等关键字就是 Java 语言中的访问权限控制语法。 private 关键字修饰的属性只能类本身访问,可以保护其不被类之外的代码直接访问。如果 Java 语言没有提供访问权限控制语法,所有的属性默认都是 public 的,那任意外部代码都可以通过类似 wallet.id=123 ; 这样的方式直接访问、修改属性,也就没办法达到隐藏信息和保护数据的目的了,也就无法支持封装特性了。 封装的意义是什么?它能解决什么编程问题? 如果我们对类中属性的访问不做限制,那任何代码都可以访问、修改类中的属性,虽然这样看起来更加灵活,但从另一方面来说,过度灵活也意味着不可控,属性可以随意被以各种奇葩的方式修改,而且修改逻辑可能散落在代码中的各个角落,势必影响代码的可读性、可维护性

设计模式之美学习(七):为什么基于接口而非实现编程?有必要为每个类都定义接口吗?

…衆ロ難τιáo~ 提交于 2019-12-06 03:26:32
基于接口而非实现编程。这个原则非常重要,是一种非常有效的提高代码质量的手段,在平时的开发中特别经常被用到。 如何解读原则中的“接口”二字? “基于接口而非实现编程”这条原则的英文描述是: “Program to an interface, not an implementation” 。理解这条原则的时候,千万不要一开始就与具体的编程语言挂钩,局限在编程语言的“接口”语法中(比如 Java 中的 interface 接口语法)。这条原则最早出现于 1994 年 GoF 的《设计模式》这本书,它先于很多编程语言而诞生(比如 Java 语言),是一条比较抽象、泛化的设计思想。 实际上,理解这条原则的关键,就是理解其中的“接口”两个字。从本质上来看,“接口”就是一组“协议”或者“约定”,是功能提供者提供给使用者的一个“功能列表”。如果落实到具体的编码,“基于接口而非实现编程”这条原则中的“接口”,可以理解为编程语言中的接口或者抽象类。 这条原则能非常有效地提高代码质量,之所以这么说,那是因为,应用这条原则,可以将接口和实现相分离,封装不稳定的实现,暴露稳定的接口。上游系统面向接口而非实现编程,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游系统的代码基本上不需要做改动,以此来降低耦合性,提高扩展性。 “基于接口而非实现编程”这条原则的另一个表述方式,是“基于抽象而非实现编程”

Java修饰符

一曲冷凌霜 提交于 2019-12-06 02:40:52
Java 修饰符 Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类、方法或者变量,通常放在语句的最前端。我们通过下面的例子来说明: public class ClassName { // ... } private boolean myFlag; static final double weeks = 9.5; protected static final int BOXWIDTH = 42; public static void main(String[] arguments) { // 方法体 } 访问控制修饰符 Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。 默认的,也称为 default ,在同一包内可见,不使用任何修饰符。 私有的,以 private 修饰符指定,在同一类内可见。 共有的,以 public 修饰符指定,对所有类可见。 受保护的,以 protected 修饰符指定,对同一包内的类和所有子类可见。 默认访问修饰符-不使用任何关键字 使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为 public static final ,而接口里的方法默认情况下访问权限为 public 。 实例: 如下例所示

设计模式六大原则

跟風遠走 提交于 2019-12-06 02:24:54
有可能重复别的文章,只是自己的一个整理 单一法则 类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障或者难以维护,这就违背了单一职责 一个类只负责一件事儿,一个方法只负责一件事儿,写了太多的分支判断,去执行各自的业务逻辑时候,就容易出现职责不单一,所以只能拆分解决职责不单一的问题 类拆分:父类+子类,每个类就很简单,类内部很简单,简单就意味着稳定,未定就是开发永恒的追求,拆分以后:代码量就变多了,类增多了,(解读量增大了,理解成本增大了) 如果方法足够简单,类够少,其实违背一下单一职责也无所谓,如果方法多了,业务逻辑复杂,建议遵循单一职责。 方法的单一职责:一个方法只负责一件事儿(根据职责分拆小方法,避免分支逻辑判断) 类的单一职责:一个类只负责一件事儿 类库的单一职责:一个类库应该职责清晰 系统层面的单一职责:为通用的功能分拆系统 优点: 降低类的复杂度 提高类的可读性,因为类的职能单一,看起来比较有目的性,显得简单 提高系统的可维护性,降低变更程序引起的风险 里氏替换原则 任何使用基类的地方,都可以透明的使用其子类 继承:子类拥有基类的一切属性和行为,任何基类出现的地方都可以用子类代替 继承+透明(安全,不会出现行为不一致的情况) 在创建对象的时候尽量使用父类做变量的声明;为了能够更加灵活