黑马程序员—面向对象之封装、继承、多态
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
刚开始接触面向对象的时候,确实对于封装、继承、多态了解不多,而且还相当困惑;不过,通过自己的学习,再结合高手的意见和方法,对类、属性、构造方法、抽象类、抽象方法、虚方法与封装、继承多态之间的关系也有所了解。
封装:在学习面向过程的时候,习惯了那种从头一句一句写到尾的过程,到了面向对象接触了类、属性和字段,也就渐渐明白:面向对象就是对面向过程的封装。比如说:
class Program
{
static void Main(string[] args)
{
//在面向过程的时候,变量是定义在主程序中的,现在有了类,都//可以把它们封装在类里面,用的时候new一个对象就可以了。
person p1 = new person();//
p1.name = "tom";
p1.age = 22;
p1.height = 170;
p1.SayHello();
Console.WriteLine("我的姓名是{0},今年{1}岁,身高{2}厘米",p1.name,p1.age,p1.height);
Console.ReadKey();
}
}
class person
{
//属性就是对字段的封装,在主程序中调用就行了。
private string name;
public string Name{get;set}
//字段:public 类型¨ 字段
public int age;
public int height;
//方法:访问修饰符 static 返回值 方法名()
//方法是对过程的封装,我们把复用的代码都写在方法里,就是要达到//封装的目的
public void SayHello()
{
Console.WriteLine("大家好!");
}}
}
}
从类、属性、方法都可以体现面向对象的封装性。
继承:就好像儿子继承父亲的特性一样。在继承中,父类有的字段、属性、方法、构造方法等,子类都可以继承使用,也就是说,我们父类的非私有成员都被子类继承过来,并且也可以对这些成员进行扩展,子类自己也可以定义自己的成员,不过我们类中只能有一个父类,且都可以被他的子类继承,也就是像现实中,我们只有一个父亲,但父亲可以有多个孩子一样。(所有的类都来源于object类,就算只有一个类也一样;继承是具有传递性的。)
还是看例子:
class Program
{
static void Main(string[] args)
{
Teacher p=new Tercher ();
p.Name=”tom”;
p.Age=19;
p.SayHello();
console.readkey();
}}
Class person //定义一个类,被继承的类,父类。
{
Public person(string name,int age) //定义一个构造方法
{
This.name=name;
This.age=age;
}
String name;
Public string Name{set;get}//属性
Int age;
Public int Age{set;get}//属性
Public void SayHello() //定义一个方法
{
Console,WriteLine(“我叫{0},今年{1}岁!”,Name,Age);
}
}
Class Teacher:person //在定义一个类,这个类继承与person类,为继//承类,子类。
{
Public person(string name,int age):base(name,age)//调用基类的构造方
//法。
{
}
Public void SayHello() //定义一个方法
{
Console,WriteLine(“我叫{0},今年{1}岁!”,Name,Age);
}
多态:对于多态,其实也不是很难理解,一个动作,不同的结果,就好像在你床头上有个按钮,刚开始你不清楚,按那个按钮是让她亮灯还是开风扇;主程序编程的时候,使用父类进行编程,具体的实现有子类来实现。不过要实现多态也并不简单,说到父类子类,那至少需要继承吧,而且还得要有子类与父类有同名的、同参数的、完全相同的方法。
例如:
class Program
{
static void Main(string[] args)
{
//以下同样都有speak这样一个动作,但它们实现的效果并不一样
person pr = new person("父类", '男', 99);
pr.Speak();
teacher th=new teacher("苏老师",'男',34);
th.Speak();
student st = new student("李恒权", '男', 23);
st.Speak();
Console.ReadKey();
}
}
class person//父类
{
//构造方法
public person(string name, char gender, int age)
{
this.name = name;
this.gender = gender;
this.age = age;
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private char gender;
public char Gender
{
get { return gender; }
set { gender = value; }
}
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
//speak方法,加有virtual就成了虚方法
public virtual void Speak()
{
Console.WriteLine("我是父类,你们都是继承我的!");
}
}
class teacher:person//继承person父类
{
//继承父类属性
public teacher(string name, char gender, int age):base(name,gender,age)
{
}
//都是speak方法,但效果与父类的不一样,实现了多态
public override void Speak()
{
Console.WriteLine("我是老师,我上课你们要认真听!");
}
}
class student : person//继承person父类
{
//继承父类属性
public student(string name, char gender, int age):base(name,gender,age)
{
}
//都是speak方法,但效果与父类的不一样,实现了多态
public override void Speak()
{
Console.WriteLine("我是学生,上课要认真听老师讲课!");
}
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
黑马程序员—面向对象之封装、继承、多态
最新推荐文章于 2019-08-25 13:13:39 发布