前面我们学到了有关面向对象的概念,而继承正是面向对象三大特征之一(其他两点分别是多态、封装)。
继承在百度上的定义:继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。
这句话说明了继承的两个作用:
1.使子类具有父类的属性和方法。
2.子类可重新定义、追加属性和方法等。
我们今天就来讲解第一个作用。
第一句话从字面意义上来讲已经把继承的这个作用说的很清楚了:陈A是陈B的儿子,儿子和爸爸长得很像,并且也能继承爸爸的财产,这可以说成是儿子继承了爸爸的属性;而儿子的脾气秉性和爸爸特别像,这个也可以说成是儿子继承了爸爸的方法。
继承的基本语法:(Father表示父类,Son表示子类)
public class Father
{
...
}
public class Son:Father
{
...
}
在以上代码中,Son:Father就表示了Son类继承了Father类。
继承的注意事项:
-由于字段一般被设置为私有,因此不建议通过继承调用
-子类继承父类,但无法继承父类的私有成员
-子类可有自己的特有成员
继承的用法?
既然介绍了继承的作用,那么继承怎么用呢?为什么要用继承呢?
我们来看一个例子。(本例子使用到构造函数这一概念)
父类:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp3
{
public class Person
{
public Person(string name, int age, char gender)//构造函数
{
this.Name = name;
this.Age = age;
this.Gender = gender;
}
public string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
char _gender;
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
public void Show()
{
Console.WriteLine("我是{0},我今年{1}岁,是个{2}的,我似里哥哥", this.Name,this.Age,this.Gender);
}
}
}
子类:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp3
{
public class Student : Person
{
public Student(string name, int age, char gender, string id):base(name,age,gender)//构造函数,继承父类的属性
{
this.ID = id;
}
string _id;
public string ID
{
get { return _id; }
set { _id = value; }
}
public void SayHello()
{
Console.WriteLine("我叫{0},我今年{1}岁,{2}生,我的ID是{3}", this.Name, this.Age, this.Gender,this.ID);
}
}
}
运行程序:
using System;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
Person p = new Person("孙笑川",25,'男');
p.Show();
Student s = new Student("小涛",30,'女',"波涛汹涌");
s.SayHello();
Console.ReadKey();
}
}
}
父类和子类都有共同的属性:name、age、gender;而子类又有自己的独特属性:id。而如果我不用继承,那么我除了要在必要的Person类中写下name、age、gender这三个基本属性,我还要在Student类中继续写这几个代码。这无疑增加了代码量。而若是有10个类似的类,而他们又都有相类似的数十个属性,那么繁重的代码量不仅让程序员感到劳累,还会容易出错。