0
点赞
收藏
分享

微信扫一扫

dotNet面对对象——4,多态

_鱼与渔_ 2022-05-03 阅读 79
c#

文章目录

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();
	}
}
举报

相关推荐

0 条评论