.Net学习 第2季03 C#面向对象 继承

.Net 视频学习第2季 C#面向对象

 

面向对象 继承

编程习惯,为每一个类都开一个新的cs类文件。

public class Person
{
    public string Name {get;set;}
    public int Age {get;set;}
    public string Gender {get;set;}
    public void walk()
    {
        Console.WriteLine("I walk!");
    }
}

public class Student:Person
{}

 

类的继承具有单根性和传递性,查看各个类之间的关系可以右键项目名称--->视图--->查看类图。

子类(派生类)能继承(使用)父类的属性和方法,但不能使用父类的私有字段。本质上子类对象在创建时创建了一个父类对象(因此可以使用其属性和方法)。默认情况下,子类对象创建时,会先调用父类的无参的构造函数。因此如果父类中定义了有参的构造函数(从而默认的无参构造函数被销毁)而又没有自定义无参构造函数,子类就无法默认地调用父类的无参构造函数来创建父类对象,从而报错。

解决办法一:父类中自定义无参构造函数(如果构造了有参构造函数的话)---这不是常见做法,因为基本上没有意义

解决办法二:在子类创建父类对象的时候,显式调用父类的有参构造函数,使用关键字 :base()

public class Person
{
    public string Name {get;set;}
    public int Age {get;set;}
    public string Gender {get;set;}
    public void walk()
    {
        Console.WriteLine("I walk!");
    }


    public Person(string name, int age, string gender)
    {
        this.Name = name;
        this.Age = age;
        this.Gender = gender;
    }   
}

public class Student:Person
{
    public Student(string name, int age, string gender, int id)
                :base(name, age, gender)
    {
        this.Id = id;
    }

    public int Id {get;set;}
}


这样当new Student()的时候,执行public Student(params),会先调用父类的public Person(params)。

Object 是所有类的基类。

如果子类定义了和父类方法同名的方法,则子类中定义的方法会自动隐藏掉从父类继承过来的方法。如果是有意隐藏,可以在访问修饰符(例如public)和返回值类型(例如void)中添加关键字new。

posted @ 2014-12-05 14:20  Cyrus Ho  阅读(150)  评论(0)    收藏  举报