C#高级进阶-[构造/继承]方法
2018-03-12 本文已影响17人
xzhuan
Aitin原创稿件,转载请注明出处!
C#语法进阶 <构造/继承>方法
* 继承语法
优点:
1.复用代码的一种方式
2.统一概念 概念的复用
3.以层次化方式管理类
狗=动物
猫=动物
缺点:
4.耦合度高 父类的改变直接影响所有子类,不需要通知子类
建议:继承层次不要太深,三层即可
尽量选择抽象类来继承
继承的特点:
1.子类拥有父类中所有非私有成员
2.构造方法不继承
*/
* 构造函数
* 1.构造方法不会继承给子类
* 2.但是在创建子类对象时,自动调用父类的构造方法,且父类构造方法先执行 顺序: 子类进入→从基类→派生类→子类
* 3.什么时候调用构造方法 new()对象的时候<分配内存空间+调用构造方法>
* 4.当子类创建对象时,默认调用父 无参 构造函数<如果程序员 没写构造方法,编译器会生成一个无参构造方法>
* bug情况: 如果程序员写了带参的构造方法,编译器不会自动生成无参构造方法 ,调用时使用了无参构造函数 则报错
* 解决方法:
* 4.1 给父类添加 无参构造函数
* 4.2 在子类方法中用base关键字指明要调用父类的哪一个无参构造方法 public Dog(int id) : base(id) { }
* 5.构造方法是创建对象的唯一通道
* 5.1 分配内存空间
* 5.2 初始化对象 对象属性
*/
namespace LearnDemo20180302
{
#region 继承
//class Program
//{
// //调用端
// static void Main(string[] args)
// {
// //写法1
// Animal ani1 = new Animal();
// ani1.Walk();
// //写法2
// Dog dog = new Dog();
// dog.Walk();
// //写法3
// //Dog dog = new Dog();
// //Animal ani2 = dog;
// Animal ani2 = new Dog(); //复用概念
// ani2.Walk();
// Console.ReadLine();
// }
//}
//class Dog : Animal
//{
//}
////定义端
//class Animal : Learn0
//{
// public Animal()
// {
// Console.WriteLine("Animal");
// }
// public void Walk()
// {
// }
//}
//class Learn0
//{
// public Learn0()
// {
// Console.WriteLine("Learn0");
// }
//}
#endregion
#region 带参构造函数
class Program
{
//调用端
static void Main(string[] args)
{
//写法1
Animal ani1 = new Animal(888);
ani1.Walk();
//写法2
Dog dog = new Dog(888);
dog.Walk();
//写法3
//Dog dog = new Dog();
//Animal ani2 = dog;
Animal ani2 = new Dog(888); //复用概念
ani2.Walk();
Console.ReadLine();
}
}
class Dog : Animal
{
public Dog(int id) : base(id) //指明要调用的 带一个参数的构造函数
{
}
}
//定义端
class Animal : Learn0
{
int id;
//public Animal()
//{
//}
public Animal(int id) : base(id)
{
this.id = id;
}
public void Walk()
{
}
}
class Learn0
{
public Learn0(int id)
{
Console.WriteLine(id);
}
}
#endregion
}