yp秋水伊人

导航

面向对象三大特性

类的关键字  class

类里面包含

成员变量

成员属性

成员方法 

 

面向对象三大特性:

 

一、封装  

目的:保护类,让类更加安全

做法:让类里面的成员变量变为私有的,做相应的方法或者属性去间接的操作成员变量

 

1、封装成员方法来间接操作类里面的成员变量

class ren
{
private string name;
private int age;//年龄必须在18-50之间
//取age的值
public int getage()
{
return age;
}
//给age赋值,

public void setage(int a)
{
age = a;
}

 

//取name的值
public string GetName()
{
return name;
}
//给name赋值
public void Setname(string n)
{
name = n;
}

2、使用成员属性来间接访问里面的成员变量

class student
{
private string _Name;//命名规则
public string Name
{
get { return _Name; }
set { _Name = value; }
}

访问修饰符:

private  私有的  只能在类里访问

protected 受保护的  只能在该类和它的子类中访问

public  公有的 在任何地方都能被访问

 

构造函数:

public Student(string s,string n)
{
_Sex = s;
_Name = n;
}

 

Student s = new Student("男");


Console.WriteLine(s.Sex);
Console.ReadLine();

作用:造对象所要调用的方法,用来创建对象     ren r = new ren();

每一个类都有一个构造方法,不写也有,只不过看不到

特殊性:写法特殊   执行时间特殊(最先执行)

执行什么操作:实现什么功能:可以实现对成员的初始化

 每一个类都有一个构造方法,不写也有只不过看不到而已

特殊性:写法特殊 执行时间特殊

 

1.使用面向对象来求两个圆之间的面积

类:class Yuan
{
private int _BanJing;

public int BanJing
{
get { return _BanJing; }
set { _BanJing = value; }
}

public double MianJi()
{
return _BanJing * _BanJing * 3.14*2;
}

public double ZhouChang()
{
return 2 * 3.14 * _BanJing;
}

 

static void Main(string[] args)
{
Yuan y1 = new Yuan();
y1.BanJing = 10;

Yuan y2 = new Yuan();
y2.BanJing = 5;

double zc = y1.ZhouChang() - y2.ZhouChang();

double mj = y1.MianJi()-y2.MianJi();


2.函数重载
函数重载需要的条件:函数名要相同,参数的个数或者参数的类型不同

public string Show()
{
return "没有参数";
}

public string Show(int n)
{
return "有一个整形参数";
}

public string Show(string s)
{
return "有一个字符串类型的参数";
}

 

 

Ren r = new Ren();
string s = r.ShowA("hello");

//函数的四要素:返回类型 函数名 --参数列表-- 函数体
//函数重载需要的条件:函数名要相同,参数的个数或者参数的类型不同


3.this关键字
虽然写在类里面,但不是属于类的,而是属于该对象的
一般来说在类里面 this关键字是可以省略的,但是如果有一个方法形参名字和成员名字重复

这时候再调用该对象里面的成员的时候需要加this关键字

4. is关键字
判断变量是不是属于某个类型
if (y2 is Ren)
{
s = "是一个人";
}
else
{
s = "不是一个人";
}

5. as关键字
转换类型(只能转换兼容类型,可以将子类对象转换为父类对象)

 

 

 

二、继承

 

子类可以继承父类的一切
特点:单继承
一个子类只能有一个父类 一个父类可以有多个子类

class Ren // 父类
{
private string _Name;

public string Name
{
get { return _Name; }
set { _Name = value; }
}
private int _Age;

public int Age
{
get { return _Age; }
set { _Age = value; }
}


public string Speak()
{
return _Name+"人类正在讲话";
}

}

//子类 class China:Ren
{
public China(string m):base(m)
{

}
public string Eat()
{
//return base.Name+"用筷子吃饭";
return base.Speak();
}
}
class America : Ren  用冒号继承ren(父类)
{
public America(string m): base(m)
{

}
public string Eat()
{
return "用刀叉吃饭";
}


C#特殊点:所有类的祖先都是object

base关键字:在子类中代表父类对象,用法和this关键字相同 写在子类里
如果父类有构造方法,那么子类也要有构造方法,如果父类构造需要参数,那么子类构造也必须有相应的参数。
子类构造后面可以通过base调用父类的构造方法
public China(string m):base(m)
{
}

 

 

三、多态    有两种

1、编译多态:函数重载

2、运行多态:

当父类引用指向子类实例时,由于子类对父类的方法进行重写,在调用该方法时表现出不同就称为多态。

父类引用:ren r=new ren()           子类实例:指对象     重写:  覆盖

父类:rirtual    虚方法

子类: override  重写


class dongwu     父类
{
public virtual string eat()
{
return "a";
}
}
class dog : dongwu    子类
{
public override string eat()
{
return "b";
}
}

条件:必须要有继承   父类引用指向子例实例   子类必须对父类的方法引用重写

里氏代换原则:如果有一个地方需要使用到父类对象,那么你可以将一个子类对象给他,    子类可以替换父类给他

dongwu dw = new dog();//动物指向子类dog实例 改变dog()

Console.WriteLine(dw.eat()); //下面也会呈现不同

 

posted on 2016-08-09 10:49  yp秋水伊人  阅读(187)  评论(0编辑  收藏  举报