C# 面向对象编程2 继承

C# 面向对象编程2 继承

1.概念

我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,
单独的封装到一个类中,作为这些类的父类。

即作用是去除重复代码。

1.1子类继承了父类,那么子类从父类那里继承过来了什么?

首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。

1.2 子类有没有继承父类的构造函数?

子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,
创建父类对象,让子类可以使用父类中的成员。
所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,
子类就调用不到了,所以子类会报错。
解决办法:
1)、在父类中重新写一个无参数的构造函数。
2)、在子类中显式的调用父类的构造函数,使用关键字:base()

1.3 继承的特性

1、继承的==单根性:一个子类只能有一个父类。
2、继承的
传递性==

object是所有类的基类

new关键字创建对象时
1)、创建对象
2)、隐藏从父类那里继承过来的同名成员
隐藏的后果就是子类调用不到父类的成员。

2. 代码

/// 父类
public class Person
{
    
    
    private string _name;
	//继承属性(不同名时)
    public string Name
    {
    
    
        get {
    
     return _name; }
        set {
    
     _name = value; }
    }
	//继承方法(不同名时)
    public void CHLSS()
    {
    
    
        Console.WriteLine("吃喝拉撒睡");
    }
    // 有参构造函数,在子类要显式初始化
    public Person(string name)
    {
    
    
        this.Name = name;
    }

}
///子类,继承语法 : 父类名
public class Student : Person
{
    
    

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

    public int Id
    {
    
    
        get {
    
     return _id; }
        set {
    
     _id = value; }
    }
    // 在父类有CHLSS()所以会覆盖父类的
    public void CHLSS()
    {
    
    
        Console.WriteLine("吃喝");
    }
    public void Study()
    {
    
    
        Console.WriteLine("学生会学习");
    }
}

在实际代码中,一个类往往建一个.cs类文件

使用

Student s = new Student("学生", 18, '男', 101);//新建对象和初始化
s.CHLSS();//调用的是子类的
s.Name = "张三";

猜你喜欢

转载自blog.csdn.net/qq_38463737/article/details/113617832
今日推荐