关键词:
1. 面向对象
1.1 封装、继承、多态理解
1.1.1 封装
封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。降低耦合、提高重用性。
1.1.2 继承
子类拥有父类的一切属性和行为。可以实现代码的重用,.NET中类只能单继承。
1.1.3 多态
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态按照不同的维度有以下几种:
1.1.3.1 编译时多态
编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。重载只是针对一个类内部的几个参数不同,名称相同的方法。
1.1.3.2 运行时多态
运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过覆写虚成员实现。
1.1.3.3 接口多态
一个类可以实现多个接口。
1.1.3.4 继承多态
一个基类可以扩展多个子类。
1.2 覆写override、重载overload
1.2.1 覆写override
子类对父类虚方法、抽象方法的重新实现。子类对父类的虚方法可重写也可不重写,对父类的抽象方法,必须重写,都需要用override关键字修饰,如下:
/// <summary>
/// 父类,抽象类
/// </summary>
public abstract class ParentClass
public ParentClass(string name)
Console.WriteLine($"This is ParentClass,My name is name");
public void CommonMethod()
Console.WriteLine("ParentClass CommonMethod");
/// <summary>
/// 虚方法,包含方法实现,可以被子类重写
/// </summary>
public virtual void VirtualMethod()
Console.WriteLine("ParentClass VirtualMethod");
/// <summary>
/// 抽象方法,子类必须实现该方法
/// </summary>
public abstract void AbstractMethod();
/// <summary>
/// 子类
/// </summary>
public class ChildClass:ParentClass
/// <summary>
/// 子类实例化的时候,要先进行父类的实例化
/// </summary>
public ChildClass()
:base("Olive")//调用父类构造函数
Console.WriteLine("This is ChildClass");
public new void CommonMethod()
Console.WriteLine("ChildClass CommonMethod");
/// <summary>
/// 重写父类的虚方法
/// </summary>
public override void VirtualMethod()
Console.WriteLine("ChildClass VirtualMethod");
base.VirtualMethod();//调用父类方法
/// <summary>
/// 实现父类的抽象方法
/// </summary>
public sealed override void AbstractMethod()
Console.WriteLine("ChildClass AbstractMethod");
ParentClass parent = new ChildClass();
Console.WriteLine("parent.CommonMethod()");
parent.CommonMethod();
Console.WriteLine("parent.VirtualMethod()");
parent.VirtualMethod();
Console.WriteLine("parent.AbstractMethod()");
parent.AbstractMethod();
结果如下:
由以上结果可以发现,子类用new修饰的方法,
运行ParentClass p=new ChildClass();
p.CommonMethod();
会输出ParentClass CommonMethod
这是因为class ChildClass继承于class ParentClass,现在ChildClass中的CommonMethod函数隐藏ParentClass中的CommonMethod,所以从ChildClass (包括继承于ChildClass的子类)的角度来看类中的CommonMethod就是ChildClass. CommonMethod,ParentClass的CommonMethod不可见,但是如果从ParentClass的角度来看ChildClass,ParentClass只认识类ChildClass中继承于类ParentClass的CommonMethod函数,对于ChildClass类中的CommonMethod它不可见,所以ParentClass a=new ChildClass ();a. CommonMethod ();相当于是调用了类ChildClass中继承于ParentClass的CommonMethod函数
1.2.2 重载overload
重载只是针对一个类内部的几个参数不同,名称相同的方法。
/// <summary>
/// 重载(编译时多态)
/// </summary>
/// <param name="name"></param>
public void CommonMethod(string name)
Console.WriteLine($"ChildClass.CommonMethod的重载:Name is name");
public void CommonMethod(int age)
Console.WriteLine($"ChildClass.CommonMethod的重载:Age is age");
public void CommonMethod(string name,int age)
Console.WriteLine($"ChildClass.CommonMethod的重载:Name is name, Age is age");
public void CommonMethod(int age,string name)
Console.WriteLine($"ChildClass.CommonMethod的重载:Age is age, Name is name");
1.3 抽象类、接口理解和选择
1.3.1 抽象类
抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。
抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,也不能被密封。另外,实现抽象方法由override方法来实现
抽象类就是父类+约束,父类是为了更好的代码重用,约束是为了多态变化。
/// <summary>
/// 父类,抽象类
/// </summary>
public abstract class ParentClass
public ParentClass(string name)
Console.WriteLine($"This is ParentClass,My name is name");
public void CommonMethod()
Console.WriteLine("ParentClass CommonMethod");
/// <summary>
/// 虚方法,包含方法实现,可以被子类重写
/// </summary>
public virtual void VirtualMethod()
Console.WriteLine("ParentClass VirtualMethod");
/// <summary>
/// 抽象方法,子类必须实现该方法
/// </summary>
public abstract void AbstractMethod();
1.3.2 接口
接口是包含一组方法的抽象类型,其中每一种方法都有其名称、参数和返回值。为了约束,告诉外部有哪些功能。
接口包含方法(不包含方法实现)、事件、属性、索引器,不包含字段、委托。
一个类可以实现多个接口,当一个类继承某个接口时,它不仅要实现该接口定义的所有方法,还要实现该接口从其他接口中继承的所有方法。
public interface ITestInterface
string Show(string name);
string Info get; set;
int this[int i] get;
event Action DoWorkHandler;
1.3.3 如何选择
接口着重于CAN-DO关系类型,而抽象类则偏重于IS-A式的关系。
抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。如果只是为了约束,有哪些功能,则选择接口,如果包含代码的重用则选择抽象类。
前端面试知识点梳理之五——javascript面向对象
一、相关问题 1.创建对象有几种方法 2.原型,构造函数,实例,原型链 3.instanceof的原理 4.new运算符二、问题解答1.创建对象有几种方法 查看详情
重新梳理it知识之java-05面向对象
一、Java面向对象学习的三条主线:1.Java类及类的成员:属性、方法、构造器;代码块、内部类2.面向对象的三大特征:封装性、继承性、多态性。(抽象性)3.其他关键字:this、super、static、final、abstract、interface、package、import... 查看详情
面向对象知识点梳理
1.核心思想:万物皆对象(OOP面向对象)2.软件出现的目的(1)用计算机的语言描述现实世界(2)用计算机解决现实世界的问题3.面向对象设计和开发程序的好处(1)(人)和(计算机)交流更加流畅(2)提高设计和开发效率4.生活中定义"看得见... 查看详情
重新梳理it知识之java-05面向对象
一、面向对象特征之三:多态性1.理解多态性一个事物的多种形态2.对象的多态性父类的引用指向子类的对象(或子类的对象赋给父类的引用)3.多态的使用:虚拟方法的调用有了对象的多态性以后,我们在编译期,只能调用父类... 查看详情
面向对象原型链继承知识梳理
单例模式:就是一个对象咯varperson={name:‘xuwen‘,age:17};varperson2={name:‘xiaoxu‘,age:25}工厂模式:就是一个函数,解决批量生产问题1functionfn(name,age){2varobj={};3obj.name=name,4obj.age=age,5obj.write=function(){6console.log(obj.nam 查看详情
面向对象知识点梳理篇一(代码片段)
0.OOP-Python面向对象Python的面向对象面向对象编程基础公有私有继承组合,Mixin魔法函数魔法函数概述构造类魔法函数运算类魔法函数1.面向对象概述(ObjectOriented,OO)OOP思想接触到任意一个任务,首先想到的是任务这个世界的构... 查看详情
java知识点梳理——装箱和拆箱
1、前言:Java是典型的面向对象编程语言,但其中有8种基本数据类型不支持面向对象编程,基本数据类型不具备对象的特性,没有属性和方法;Java为此8种基本数据类型设计了对应的类(包装类),使之相互转换,间接实现基本... 查看详情
.net知识梳理——5.委托(代码片段)
1.委托委托就是一个能把方法当参数传递的对象,而且还知道怎么调用这个方法。在IL中委托就是一个类。继承自System.MulticastDelegate特殊类,不能被继承。1.1 委托的声明、实例化、调用1.1.1 声明委托用deleate关键... 查看详情
java面向对象知识(上:基础篇)(代码片段)
Java面向对象(基础篇)一、面向对象的思想1、什么是面向对象1.1面向过程1.2面向对象二、类和对象2.1类2.1.1类的组成2.2对象三、类和对象在代码中的运用3.1类的应用3.1.1类定义的格式3.2对象的应用3.2.1创建对象的格式以及... 查看详情
typescript知识梳理
概述 TypeScript简称TS,具有类型系统,且是JavaScript的超集。它可以编译成普通的JavaScript代码。TypeScript支持任意浏览器,任意环境,任意系统并且是开源的。通过TS能够生成JS,TS是结构性语言,能够类似C#和Java那样,面向对象编... 查看详情
java面向对象大致梳理
面向对象思想、面向对象思想概述:Java设计语言面向对象:Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。这里的对象泛指... 查看详情
.net知识梳理——8.aop
1.AOPAOP:允许开发者动态的修改静态的OO模型,就像现实生活中对象在生命周期中会不断的改变自身。 AOP是一种编程思想,是OOP思想的补充1.1 AOP面向切面编程1.1.1 AOP有以下好处1.1.1.1 聚焦核心业务... 查看详情
.net知识梳理——8.aop
1.AOPAOP:允许开发者动态的修改静态的OO模型,就像现实生活中对象在生命周期中会不断的改变自身。 AOP是一种编程思想,是OOP思想的补充1.1 AOP面向切面编程1.1.1 AOP有以下好处1.1.1.1 聚焦核心业务... 查看详情
java面向对象泛型
这个第一篇知识梳理的博客,希望我可以坚持下去将知识进行总结。这是在极客学院里看到的视频,目录如下,蛮清晰的。然后我将视频中所说再记忆下。java面向对象之泛型:认识泛型 JavaSE1.5的新特性,泛型的本质是参数... 查看详情
面向对象知识整理
魔术方法1.__construct构造函数2.__destruct析构函数3.__set/__get封装变量里的读取设置4.__tostring输出对象5.__clone克隆6.__autoload自动加载//面向对象的关键字1.class定义类2.public/protected/private访问修饰符3.$this这个对象4.extends继承5.override/overl... 查看详情
梳理知识
总结一下自己今天记录和学到的知识一 vimware在win10的情况下怎么安装(1)首先先关闭防火墙以及杀毒软件。(2)试着安装14.1版本二怎么把eno改为eth(1)先用上下光标,止住sleet(60)(2)按住tab健(3)空格 net,ifna... 查看详情
js常见知识点3.面向对象之继承设计模式
一、面向对象的三大特征 建议回复: 封装:屏蔽内部细节、调用外部接口实现对应功能(函数调用) 继承:子类继承父类中的属性和方法 多态(js中不存在多态的概念)二、继承 建议回复: 继承:... 查看详情
spring核心组件知识梳理
Spring的一些概念和思想Spring的核心:AOP、IOC。简单点说,就是把对象交给Spring进行管理,通过面向切面编程来实现一些"模板式"的操作,使得程序员解放出来,可以更加关注业务实现。Spring已经是一站式的开源框架解决方案,而... 查看详情