dotNet面对对象——4,多态

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

猜你喜欢

转载自blog.csdn.net/qq_37284843/article/details/124554473