C# 面向对象特性 封装 继承 多态
2017-05-19 18:42
519 查看
封装
将方法细节隐藏,只留名字。Public:所有对象都可以访问;
Private:对象本身在对象内部可以访问;
Protected:只有该类对象及其子类对象可以访问
Internal:同一个程序集的对象可以访问;
Protected internal:一个程序集内的对象,或者该类对象及其子类可以访问;
以上是常用的封装的特性修饰符;其作用主要是决定外部能否对这个封装(对象)进行操作;
继承
将已有的东西(方法,字段……)进行复制粘贴,减少代码量。正式点讲就是 ,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类(父类),这个新的类被称为派生类(子类)。
号外
IS–A基于类继承或接口实现,IS-A是表达这句话的一种方式:“这个东西是那个东西的一种”。例如:野马是一种马。(是一个)HAS-A关系是基于用法(即引用)而不是继承。换句话说,如果类A中的代码具有对类B实例的引用,则“类A HAS-A类B”。例如:马有缰绳。(有一个)
“is-a”代表的是类之间的继承关系,比如PC机是计算机,工作站也是计算机。PC机和工作站是两种不同类型的计算机,但都继承了计算机的共同特性。因此在用Java语言实现时,应该将PC机和工作站定义成两种类,均继承计算机类。
“has -a”代表的是对象和它的成员的从属关系。同一种类的对象,通过它们的属性的不同值来区别。比如一台PC机的操作系统是Windows,另一台PC机的操作系统是Linux。操作系统是PC机的一个成员变量,根据这一成员变量的不同值,可以区分不同的PC机对象。
什么可以继承
类(只能一个),接口(可以多个,不好理解接口,就暂时理解成准备给很多类使用的抽象类)。被sealed(密封)修饰符修饰的类是无法继承的。
多态
说实话,这个就是继承的实际用途了,实现动态多态;实现的多态其实分为两种,一种是静态多态,种是动态多态;
静态多态
简单,就两种方式方法的重载
class example void print(int i) { Console.WriteLine("Printing int: {0}", i ); } void print(double f)//**相同类;相同名字;不同参数;** { Console.WriteLine("Printing float: {0}" , f); }
符号的重载
public static example operator+(example a,example b) { example c= new example(); c.length = b.length + c.length; c.breadth = b.breadth + c.breadth; c.height = b.height + c.height; return box; }
动态多态
关键字 :virtual(虚方法),abstract(抽象类),new(隐藏方法)using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace shuclass { class A { public A() { Console.WriteLine("我是A类的无参构造函数"); } public A(int i = 0) { Console.WriteLine("我是A类的第一个有参构造器"); Console.WriteLine(i); } public virtual void bad() { Console.WriteLine("baaaaaaaaaaaad"); } public void yes() { Console.WriteLine("yeeeeeeeeeeeees"); } } class B : A { public B() // : base(333) { Console.WriteLine("我是B类的构造函数"); } public B(int i) : base(i) //用:base(i)调用父类中的有参构造函数 { Console.WriteLine("我是类B的第一个有参构造器"); } public void Good() { Console.WriteLine("goo00000000000000000000000000d"); } public override void bad() { base.bad(); Console.WriteLine("beeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed"); } new public void yes() { Console.WriteLine("NOOOOOOOOOOOOOOOOO"); } } class Test { static void Main() { A b = new B(); b.bad(); b.yes(); // b.Good();//无法调用 Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); B b1 = new B(1); b1.Good(); Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); A a = new A(); A c = b1; c.yes(); } } }
复制到console工程文件
F11试试看,花一个小时,相信你能理解的。
相关文章推荐
- java面向对象特性-封装、继承和多态
- 黑马程序员------oc之面向对象特性 封装、多态、继承等
- 面向对象的三大特性(封装、继承和多态)
- 面向对象三大特性——封装、继承、多态
- 面向对象特性,包括继承、封装、多态、抽象、访问控制
- 1.面向对象三大特性,封装,继承,多态
- 黑马程序员----面向对象设计的封装、继承、多态特性
- 面向对象基础知识(5)- 封装 继承 多态
- 面向对象三大特性 之 封装(C#)
- 面向对象中的封装、继承 、多态
- 型面向对象那点儿事――封装、继承、多态
- 菜鸟的学习之路(3) —java 面向对象程序设计的封装、继承和多态
- java编程面向对象思想:封装,继承,多态
- Java学习系列(四)Java面向对象之修饰符、封装、继承、多态详解
- 黑马程序员 面向对象特征 封装、继承、多态总结
- 设计模式学习(一):java 面向对象特征:抽象、封装、多态、继承
- 面向对象三大特征:封装、继承、多态
- java面向对象基本思想--封装继承多态
- 面向对象--继承,多态,封装
- C#总结(三)—三大特性(封装、继承、多态)