您的位置:首页 > 游戏 > 游戏 > 哈尔滨信息工程学院地址_防止迷路请收藏地址github_冬镜seo_网站推广的目的是什么

哈尔滨信息工程学院地址_防止迷路请收藏地址github_冬镜seo_网站推广的目的是什么

2024/10/13 10:30:09 来源:https://blog.csdn.net/2301_77947509/article/details/142874897  浏览:    关键词:哈尔滨信息工程学院地址_防止迷路请收藏地址github_冬镜seo_网站推广的目的是什么
哈尔滨信息工程学院地址_防止迷路请收藏地址github_冬镜seo_网站推广的目的是什么

C# & Unity 面向对象补全计划 之 接口_unity c# 接口-CSDN博客

这一篇文章泛泛概述了抽象类与接口,但是他俩都是用作强制继承的,却没有进行系统性地整理实在不合适

今天我就一步到位,两步分清他俩该在什么场景调用

一看构造函数 知特征

        记住,结构体和类的本质特征是拥有构造函数

抽象类有构造函数

字段:也是因为这个,所以抽象类可以有字段

属性:至于属性,这是.net引入的语法糖所以在类和接口中拥有

方法:抽象方法没有方法体,必须写在抽象类中且强制重写

当然抽象类可以包含非抽象方法

// 定义一个抽象类
public abstract class Animal
{public abstract string Name { get; set; }public abstract string Kind { get; set; }public abstract string Habit { get; set; }public abstract void DescribeSelf();
}// 继承抽象类并实现抽象方法
public class Cat : Animal
{public override string Name { get; set; } = "猫";public override string Kind { get; set; } = "猫科类";public override string Habit { get; set; } = "逮老鼠";public override void DescribeSelf(){Console.WriteLine($"当前动物\n名称:{Name}\n种类:{Kind}\n习性:{Habit}");}
}

接口没有构造函数 

字段:没有构造函数,所以他就不是类,所以其不能包含字段

属性:同上,语法糖通用

方法:开始是没有方法体的,但是c# 8.0以后就可以有了,叫做默认接口方法,用不用看自己的需求

// 定义一个接口
public interface IShopping
{string ShoppingName { get; set; }void ShoppingCount();
}// 实现接口
public class Shopper : IShopping
{public string ShoppingName { get; set; } = "衣服";public void ShoppingCount(){Console.WriteLine($"我购买了100件: {ShoppingName}");}
}

二看继承数 识用途

抽象类是类,所以只能被单继承(c#)

        正是因为单继承,所以,抽象类天生适合定义所有具有基础属性的祖宗,且因为继承的传递性,可以传递下去

// 定义动物抽象类
public abstract class Animal
{public abstract void MakeSound();
}// 定义猴类,继承动物抽象类并实现抽象方法
public class Monkey : Animal
{public override void MakeSound(){Console.WriteLine("Monkey makes sound.");}public void Climb(){Console.WriteLine("Monkey can climb.");}
}// 定义人类,继承猴类
public class Human : Monkey
{public void Speak(){Console.WriteLine("Human can speak.");}
}

类可以继承多个接口

        正是因为多继承,所以,接口天生适合定义数量很多的行为

public interface IFlyable
{void Fly();
}public interface ISwimmable
{void Swim();
}public interface IAquaticBird : IFlyable, ISwimmable
{void DisplayAbilities();
}public class Duck : IAquaticBird
{public void Fly(){Console.WriteLine("Duck is flying.");}public void Swim(){Console.WriteLine("Duck is swimming.");}public void DisplayAbilities(){Console.WriteLine("Duck can both fly and swim.");}
}

最后,抽象类可以继承接口

// 定义一个接口
public interface IAnimal
{void MakeSound();
}// 定义一个抽象类,实现接口
public abstract class Mammal : IAnimal
{public abstract void MakeSound(); // 抽象类没有实现接口方法public void Breathe(){Console.WriteLine("Mammal is breathing.");}
}// 定义一个具体类,继承抽象类
public class Human : Mammal
{public override void MakeSound(){Console.WriteLine("Human says hello.");}
}


 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com