继承

1. 继承

面向对象开发有三大特性(特点/特征):封装,继承,多态。

将一堆类中的一些共有的“成员”单独抽取出来,作为一个父类,然后这一堆类继承这个父类,共享父类的资源,这就叫做继承。

继承的优点

①优化代码结构,让类与类之间产生关系(人不是孤立存在的,类也一样);

②提高代码的复用性,便于阅读(写更少的代码,干更多的活);

③为“多态”提供前提(多态是面向对象最复杂的一个特性,后面重点讲解)。

继承的语法格式

属性 类修饰符 class 派生类名:基类名{
    类体
}

注意:如果派生类继承了基类的私有成员变量,那么派生类不能通过新增或者覆盖的方法直接修改基类私有成员变量,只能通过基类原有的公有方法SetXxx()修改。如果希望在派生类中直接修改,必须在基类中修改它们的属性为protected。

继承的特点

(1)C#语言只允许单继承,即派生类只能有一个基类;

(2)C#继承是可以传递的,C继承B,B继承A,那么C不但继承B的成员,还继承A中的成员。

(3)派生类可以添加新成员,但不能删除继承的成员;

(4)派生类不能继承基类的构造函数、析构函数和事件;但能继承基类的属性;

(5)派生类的对象也是其基类的对象,但基类的对象不是其派生类的对象。故基类的引用变量可以引用其派生类对象。

2. 继承中构造函数调用

 子类调用父类的构造函数:

 1、编写父类中的构造方法

public class Fruit
{
    private string name;
    private string colour;
    private int num;
    //构造方法
    public Fruit(){}
    public Fruit(string name,string colour,int num)
    {
        this.name=name;
        this.colour=colour;
        this.num=num;
    }
    //方法
    public void printFruit()
    {
         Console.WriteLine("这是一个{0}颜色的{1},一共有{2}个",colour,name,num);
    }
}

 2、编写子类的构造方法

在各个子类中编写各自的构造方法,使用base关键字传值给父类。

public class Apple:Fruit
{
    private string other;

    public Apple(){}
    public Apple(string name,string colour,int num,string other):base(name,colour,num)
    { 
    }
}

3、实例化子例对象

一般只会实例化子类的对象,因为子类才是具体的。

Apple a1=new Apple("苹果","红",1);

Apple a2=new Apple("苹果","绿",5);

a1.printFruit();

a2.printFruit();

注意:

1.隐式调用父类构造函数:

创建子类对象时会首先调用父类的构造函数,然后才会调用子类本身的构造函数。

如果没有指明要调用父类的哪一个构造函数,系统会隐式地调用父类的无参构造函数。

如果父类定义了有参的构造函数,没有写明无参的构造函数,子类中的构造函数会出错。

2.显式调用父类构造函数:

C#中可以用base关键字调用父类的构造函数.只要在子类的构造函数后添加":base(参数列表)",就可以指定该子类的构造函数调用父类的哪一个构造函数.

这样可以实现继承属性的初始化,然后在子类本身的构造函数中完成对子类特有属性的初始化即可。

3. 成员继承

继承的效果

字段/属性

字段/属性可以使用private和public进行修饰,但80%的时候使用private修饰。

private修饰的字段/属性,我们在子类中访问不到;

public修饰的字段/属性,我们在子类中可以访问到,使用base.字段/属性名。

普通方法

方法可以使用private和public进行修饰。

private修饰的方法,我们在子类中访问不到;

public修饰的方法,我们在子类中可以访问到,使用base.方法名()。

构造方法

构造方法可以使用private和public进行修饰,只有在使用单例模式的时候才使用private修饰。

private修饰的构造方法,我们在子类中访问不到;

public修饰的构造方法,我们在子类中可以访问到,使用base()。

子类并没有继承到构造方法,但是可以用base访问到。

4、继承的堆栈关系

 

 

其他:

小立方体是方法,小扳手是属性,蓝色砖块是字段

 

posted @ 2022-08-17 11:02  石元  阅读(70)  评论(0编辑  收藏  举报