文章目录
1,重写父类的方法(二)
利用virtual,override关键字。可以在父类调用方法时,使用子类的方法。
namespace a {
public class Program {
public static void Main(string[] args) {
A s1 = new B("张三", 23);
s1.say();
}
}
public class A {
public string name;
public A(string name) {
this.name = name;
}
public virtual void say() {
Console.WriteLine($"我叫{
name}");
}
}
public class B : A {
public int age;
public B(string name, int age) : base(name) {
this.age = age;
}
public override void say() {
Console.WriteLine($"我叫{
name},今年{
age}岁");
}
}
}
2,抽象方法,抽象类
抽象方法:没有方法体,用来给子类实现。
有抽象方法的类必须要是抽象类。
子类也必须重写,否则还是抽象类。
抽象类是用来继承的,不能直接创建实例。
namespace a {
public class Program {
public static void Main(string[] args) {
A s1 = new B();
s1.say();
}
}
public abstract class A {
public abstract void say();
}
public class B : A {
public override void say() {
Console.WriteLine("BBB");
}
}
}
3,部分类
一个类,拆成多个部分。
可以凑个七龙珠。
namespace a {
public class Program {
public static void Main(string[] args) {
A a = new A();
a.age = 23;
a.say();
}
}
public partial class A {
public int age;
}
public partial class A {
public void say() {
Console.WriteLine(this.age);
}
}
}
4,密封类
一个类,但是绝育了。(不能有子类)
public sealed class A {
public int age;
}
5,接口
抽象的十分彻底,以至于只有抽象方法。
接口中不需要设置访问修饰符,都是public。
public interface A {
void say();
}
类可以继承接口。
namespace a {
public class Program {
public static void Main(string[] args) {
A a = new B();
a.say();
}
}
public interface A {
void say();
}
public class B : A {
public void say() {
Console.WriteLine("BBB");
}
}
}
接口之间可以多继承。
public interface A {
void say();
}
public interface B {
void say2();
}
public interface C : A, B {
}
类对接口也可以多继承。
同时继承类时,类在前面。
public class A {
}
public interface B {
void say2();
}
public class C : A, B {
public void say2() {
throw new NotImplementedException();
}
}