接口
接口表现为:1 区别能力 2 规范写作
我认为接口是一种规范需求代码的编译方式,接口的存在类似于你的电脑当中的USB,给予相关功能的规范力。
特征:
1:接口不能被实例化。
2:接口中的方法都没有方法体,是用于后续实现这些方法而存在的。
3:接口中系统默认方法为Public(公开) abstract(抽象类)。
4:没有方法体的方法是需要类去实现的。
5:接口中可以有属性,常量,索引器,不能有字段
//例如
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
interface USB
{
public int Age { get; set; }
static double PI = 3.14;
void ChaFengShan();
void ChaShouJi();
}
}
接口继承之后
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class FengShan : USB
{
public int Age { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
public void ChaFengShan()
{
Console.WriteLine("起风了");
}
public void ChaShouJi()
{
Console.WriteLine("来电话了");
}
}
}
方法在接口之后在子类中实例化,定义属性的变量也只能在子类中实现。
继承
继承:一个类具有另一个类的属性和方法,这个类叫子类(派生类 ,超类)
继承的关键符号为 :(冒号)
class Father
{
public string nose = "大鼻子";
public void Smoking()
{
Console.WriteLine("烟鬼");
}
public Father()
{
Console.WriteLine("我是父类");
}
}
class Son:Father
{
void Get()
{
Console.WriteLine(nose);
Smoking();
Console.WriteLine(base.nose);
base.Smoking();
}
public Son(): base()//调用父类构造方法
{
Console.WriteLine("我是子类");
}
}
特征:
1、子类继承了父类的属性和方法(public、protected),但是构造方法不能被继承
2、子类使用构造方法调用父类构造方法用 base()
3、创建子类对象时,系统默认先调用父类构造方法,然后再调用子类构造方法
4、子类使用父类的属性和方法用 base 关键字(public、protected)
注意:
当父类有有参构造方法时,如果子类有构造方法(无参或有参),要求父类必须有一个无参构造方法。
如果子类没有构造方法,父类也需要提供一个无参构造方法。
如果不提供,子类构造方法会报错!
重写(override):
重写:在子类和父类中,子类中的方法名称和父类方法名称相同,参数相同
重载(overload):在同一个类中,方法名称相同,参数不同(个数、类型),与返回值无关
public virtual void Eat()//虚方法
{
Console.WriteLine("吃白萝卜");
}
public override void Eat()//重写方法
{
Console.WriteLine("吃肉");
}
修饰符(访问权限):
public(本类、外部类) private(本类) protected(本类 子类) internal(本类 子类)
虚方法:virtual
在某基类中声明 virtual 并在一个或多个派生类中被重新定义的成员方法称为虚方法。
虚方法的作用就是实现多态性(Polymorphism),多态性是将接口与实现进行分离。
在基类的函数中声明关键字virtual,就可以在其派生类中通过关键字override重写该方法。重写后的virtual方法依旧是virtual方法。
当有一个定义在类中的方法需要在继承类中实现时,可以使用虚方法。
Sealed关键字
C#提供了一个Sealed关键字。此修饰符会阻止其他类从该类继承
集合
ArrayList
List
//案例
List<Student>lsit=new List<Student>();
list.add(new Student(“Tom”, 18, 100, “class05”));
list.add(new Student(“Jerry”, 22, 70, “class04”));
list.add(new Student(“Owen”, 25, 90, “class05”));
list.add(new Student(“Jim”, 30,80 , “class05”));
list.add(new Student(“Steve”, 28, 66, “class06”));
list.add(new Student(“Kevin”, 24, 100, “class04”));
可以用存入链表当中读取使用。