dotNet面对对象——3,继承

1,子类

子类有父类的public属性与方法。

你只能有一个父类。

namespace a {
    
    
	public class Program {
    
    
		public static void Main(string[] args) {
    
    
			B s1 = new B();
			s1.name = "张三";
			s1.say();
		}
	}
	public class A {
    
    
		public string name;
		public void say() {
    
    
			Console.WriteLine($"我叫{
      
      name}");
		}
	}
	public class B : A {
    
    
	}
}

效果:

在这里插入图片描述

2,调用父类的构造

在构造后面加冒号。

namespace a {
    
    
	public class Program {
    
    
		public static void Main(string[] args) {
    
    
			B s1 = new B("张三", 23);
			s1.say();
		}
	}
	public class A {
    
    
		public string name;
		public A(string name) {
    
    
			this.name = name;
		}
		public void say() {
    
    
			Console.WriteLine($"我叫{
      
      name}");
		}
	}
	public class B : A {
    
    
		public int age;

		public B(string name, int age) : base(name) {
    
    
			this.age = age;
		}
		public void say() {
    
    
			Console.WriteLine($"我叫{
      
      name},今年{
      
      age}岁");
		}
	}
}

效果:

在这里插入图片描述

3,隐藏父类的成员

之前的例子已经重写了,但不够完全。

子的方法需要加上new关键字:

public new void say() {
    
    
	Console.WriteLine($"我叫{
      
      name},今年{
      
      age}岁");
}

如此,父类中的say方法会被隐藏。
子类中所有的say都是子类自己的。

4,里氏替换原则

所有父类的实例,都可以替换成子类,功能没有任何的影响。

比如,案例中的B类对象可以用A类接收。

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 void say() {
    
    
			Console.WriteLine($"我叫{
      
      name}");
		}
	}
	public class B : A {
    
    
		public int age;

		public B(string name, int age) : base(name) {
    
    
			this.age = age;
		}
		public new void say() {
    
    
			Console.WriteLine($"我叫{
      
      name},今年{
      
      age}岁");
		}
	}
}

5,访问修饰符

在这里插入图片描述

只在项目内使用,有三种:
private:只有类内部。
private protected:加上当前项目的子类。
internal:当前项目任意位置。

外部可以访问的有三种:
protected:任意子类。
protected internal:当前项目,以及外部子类。
public:都可以。

猜你喜欢

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