您的位置:首页 > 编程语言 > C#

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试试看,花一个小时,相信你能理解的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面向对象