C#Lesson09 面向对象

构造函数

什么是构造函数
在前面我们讲了类如何实例化对象,是通过new关键字
//实例化一个cat对象
Cat cat = new Cat();

构造函数的作用
构造函数的作用就是创建类或结构的实例,在实例化对象的时候,也
就是new Cat()时会调用.
构造函数可以快速的帮我们构建对象,一般来说,我们在构造函数中
做些初始化字段的功能

构造函数的特点
>> 构造函数(方法)必须与类重名
>> 构造函数没有返回值,但可以有形参
>> 构造函数可以有重载
>> 如果一个类中没有构造函数,系统会为我们自动添加一个无参数
的构造函数
>> 如果一个类中存在一个或多个构造函数重载,此时系统不会在为
我们的类自动生成构造函数


特别注意!!!!!
假如我们把之前无参数的构造函数删掉,让我们的类保持上一个带有
参数的构造函数时,此时运行程序会报错.
Person p1 = new Person();
报错因为这一一句代码,原因是 如果一个类中存在一个或多个构造函
数重载,此时系统不会在为我们的类自动生成无参数构造函数,但是
我们又通过无参数构造函数去实例化对象,相当于调用了一个不存在
的方法



------------------------------------------------------------------------------------------------------------------------

面向对象三大特性


封装
封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集
合在一个个的类中。 找到变化并且把它封装起来,你就可以在不
影响其它部分的情况下修改或扩展被封装的变化部分,这是所有设
计模式的基础,就是封装变化,因此封装的作用,就解决了程序的
可扩展性。


继承
继承用于创建可重用,扩展和修改在其他类中定义的行为的新类.
其成员被继承的类陈伟”基类”,继承这些成员的类称为”派生类”
派生类只能有一个直接基类.
继承有可传递行,即A继承自B,B继承自C,那么A会继承B和C声明的
成员
继承的特点总结
>> 在程序中使用:表示继承 class A:B
>> 子类可以继承父类中内公开会受保护的成员变量
>> 继承具有传递性
>> 派生类可以赋值给基类,但是基类不能赋值给派生类
>> 子类成员变量,父类不能拥有
>> 子类成员变量与父类成员变量重复,覆盖父类成员变量



多态
当派生类从基类继承时,它会获得基类公开的所有方法,字段,属性以
及时间.派生类可以选择:
>> 继承最接近基类方法而不重写它
>> 重写基类中的虚拟成员
>> 定义隐藏基类实现的成员的新非虚实现
关于多态
其实之前学的方法重载也属于多态的一种表现形式.
在继承关系中,体现多态的是方法重写
方法重写
方法重写顾名思义,就是重写基类的虚方法.在方法重写中,基类的虚
方法用virtual修饰,子类重写时使用override.严格意义上来讲
virtual和override必须成对出现.
如果在基类中声明了虚方法,子类没有使用override,此时不属于方
法重写,而是方法覆盖.如果基类没有虚方法,此时子类是不可以使用
override关键字的!
方法重写需要注意的地方
>> 不能重写父类中用sealed修饰的方法
>> 不能重写父类中用static修饰的方法
>> 如果父类中存在抽象方法,此时子类必须重写


-----------------------------------------------------------------------------------------------------------------------

应用

using System;


namespace Lesson09_1
{
class MainClass
{
public static void Main (string[] args)
{
// Person p = new Person ();
// Console.WriteLine (p.name);
//
// Person p2 = new Person ();


// Person p1 = new Person ("阿三");


// B b = new B ();
// A b2 = new B ();//子类构造父类对象
// //object a = new A();
// B b3 = (B)b2;


// B b = new B ();
// b.name = "我是b";//直接使用继承子A的字段
// Console.WriteLine (b.name);
// b.Eat();

//创建三个门派,古墓派,全真教,华山派,每个门派至少有两个特征,分
//别是武学名称,武学威力系数.以及一个攻击行为.
Gumu gm = new Gumu ("玉女心经", 100);
Quanzhen qz = new Quanzhen ("全真剑法", 50);
Huashan hs = new Huashan ("独孤九剑", 500);
gm.Attak ();
qz.Attak ();
hs.Attak ();


}
}
}

-----------------------------------------------------------------------------------------------------------------------

A类

using System;


namespace Lesson09_1
{
//所有的类都会继承子Object
//Object是所有类的基类
public class A
{
public string name;//字段会被子类继承
private int age;//私有字段是可以被子类继承的,但是子类无法访问
public A ()
{
Console.WriteLine ("A的无参构造函数");
}
public A(string name){
this.name = name;
Console.WriteLine ("A中有name参数构造函数");
}
public void Eat(){
Console.WriteLine ("A吃X");
}
}
}


-----------------------------------------------------------------------------------------------------------------------

B类

using System;


namespace Lesson09_1
{
public class B:A
{
//调用B的构造函数的时候,会去寻找B的基类的无参构造函数
public B ()
{
Console.WriteLine ("B的无参构造函数");
}
public B(string name){
Console.WriteLine ("B中的构造函数");
this.name = name;
}
//使用new关键字可以覆盖基类中相同类型的方法
public new void Eat(){
Console.WriteLine ("B吃X");
//可以使用base关键字调用基类方法
base.Eat ();
}
}
}


-----------------------------------------------------------------------------------------------------------------------

School类

using System;


namespace Lesson09_1
{
public class School
{
private string gongFuName;
private float gongFuPower;


public School(string name,float power){
gongFuName = name;
gongFuPower = power;
}


public void Attak(){
Console.WriteLine ("用{0},对敌人造成了{1}伤害",gongFuName,gongFuPower);
}
}
}


-----------------------------------------------------------------------------------------------------------------------

Gumu类

using System;


namespace Lesson09_1
{
public class Gumu:School
{
public Gumu (string name,float power):base(name,power)
{

}
}
}


-----------------------------------------------------------------------------------------------------------------------

Quanzhen类

using System;


namespace Lesson09_1
{
public class Quanzhen:School
{
public Quanzhen (string name,float power):base(name,power)
{

}
}
}
-----------------------------------------------------------------------------------------------------------------------

Huashan类

using System;


namespace Lesson09_1
{
public class Huashan:School
{
public Huashan (string name,float power):base(name,power)
{

}
}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值