抽象类、父类、接口

一、抽象

  用 abstract 关键字修饰的类叫抽象类,用 abstarct 修饰的方法叫抽象方法。
  • 抽象类

  • 用于归类有相同属性和方法的类(但是不同的类方法的实现方式不一样),比如:不同的领导都有相同的属性和方法,但是不同的领导处理事情的方式不一样

    • 抽象类可以定义属性

    • 可以有抽象方法(抽象方法必须在抽象类中)

      • 抽象方法只有方法声明,没有方法体,继承该抽象类(接口)的非抽象子类必须 实现该抽象方法

    • 可以有非抽象方法

    • 抽象类能定义构造器,但是本身不能实例化,只能实例化该抽象类的实现类

    • 抽象类中怎么确定方法需要用虚方法还是抽象方法?

      • 当不需要用父类中的实现时,将其定义为抽象方法(实现类自己写自己的实现过程)

      • 当实现类的方法和都一样,少数不一样时,将方法以虚方法形式写在父类,在少数不一样的过程中重写方法

public abstract class ClassName
{
    public int age{get;set;}
    public abstract int GetMaxNumber(int num1,int num2);
    
    public int GetMinNumber(int num1, int num2)
    {
        return (num1 > num2 ? num2 : num2);
    }
    
}

二、继承父类

  • 用于方便有相同属性和方法的类(实现方式也相同,不同的话就要设计重写),比如:控制器中公共的方法放在一个基类控制器中

    • 一个类只能有一个父类,C# 语言中继承 关系具有传递性,即 A 类继承 B 类、C 类继承 A 类,则 C 类也相当于继承了 B 类。

    • 在.NET 6 中,子类中出现同方法名同参数名的情况下(参数不同),程序调用时会选择父类的方法。

    • 在更前面的版本不同类会执行各自的方法,要调用父类的方法要用 base.FunctionName() 

      • 但是要直接使用父类的方法,最好用 base.FunctionName() ;

      • 如果想重写方法,要在父类方法中将该名称的方法标注成 virturl ,然后在实现类中用 override 标注重写

  三、接口

    • 类之间只支持单继承,而接口是为了实现多重继承关系设计的

    • 一个类可以同时多个接口,实现接口的同时还能继承其他类

    • 接口也能继承接口

    • 定义接口

      • 接口名称一般用 I 开头,加上其他单词构成

      • 不能使用修饰符

        • 不能使用 public、private、protent、internal 访问修饰符 和 static、virtual、abstract、sealed 修饰符

      • 接口中不能定义字段

      • 接口中的方法不能包含方法体

      • 接口中的默认访问类型是 public

    interface IMyInterface
    {
        //属性
        int age{get;set;}
        string name{get;set;}
        
        //方法
        int MinNumber(int num1, int num2);   
        int MaxNumber(int num1, int num2);  
    }
    • 接口不能直接创建而是要通过实现类创建实例

    • 实现类实现接口时必须隐式或显式(不可使用修饰符,属性或方法前加上接口名)实现接口中的所有方法

    //隐式实现接口
    class DoInterfaceClass : IMyInterface
    {
        //类新增的属性
        public string sex{get;set;}
        
        //隐式实现接口属性
        public int age{get;set;}
        public string name{get;set;}
        
        //隐式实现接口方法
        public int MinNumber(int num1, int num2)
        {
            return (num1 > num2 ? num2 :num1);
        }
        public int MaxNumber(int num1, int num2)
        {
            return (num1 > num2 ? num1 :num2);
        }
    }
    ​
    //显示实现接口
    class DoInterfaceXSClass : IMyInterface
    {
        //类新增的属性
        public string sex{get;set;}
        
        //显示实现接口属性
        int IMyInterface.age{get;set;}
        string IMyInterface.name{get;set;}
        
        //显示实现接口方法
        int IMyInterface.MinNumber(int num1, int num2)
        {
            return (num1 > num2 ? num2 :num1);
        }
       
        int IMyInterface.MaxNumber(int num1, int num2)
        {
            return (num1 > num2 ? num1 :num2);
        }
    }
    • 如果不需要在继承类中完全实现接口方法,可以用抽象方法实现

    //不完全实现接口
    abctract class DoInterfaceAbstractClass : IMyInterface
    {
        //类新增的属性
        public string sex{get;set;}
         
        public int age{get;set;}
        public string name{get;set;}
         
        public int MinNumber(int num1, int num2)
        {
            return (num1 > num2 ? num2 :num1);
        }
       
        public abstract int IMyInterface.MaxNumber(int num1, int num2);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值