本帖最后由 李 玉林 于 2012-9-14 20:05 编辑
继承:
<继承> 最主要的优点: 代码的复用
父类 子类
| |
基类 派生类
1: 继承的语法 :
(I )派生类
[attributes](属性) [access-modifiers](访问修饰符) class identifiers (方法类型)[:base-class](方法名) {class-body} (方法参数)
2: 继承的原理: 1: 先有父类 (构造方法)----然后子类(子类的构造方法)
2: 传递性-----------object
3: 单根性,一个类只能有一个父类(接口)
3.继承的分类:
1:分类
修改继承
1 覆盖(new):父类方法保留
2 重写:父类方法不保留
关键字:virtual(父类)
overrise(子类)
2: 在传递参数时,可以传递参数类型的子类
即 里氏代换原则(任何时候父类可以被子类代替)
3: 防止被继承
关键字:sealed
静态类不可以继承
4: 抽象类
只是用来被继承只给子类使用
关键字:abstract
特殊性:a:可以含有抽象方法但是抽象方法必须在抽象类中;
要求:1、必须被子类重写;
2、不可以在父类中实现(不可以写代码)(不能产生对象);
3、抽象类不能被静态类继承
4:lsp原则(里氏代换原则)
子类可以代替父类,任何时候
反过来,需要强制转换
例:
namespace _1
{
class Program
{
static void Main(string[] args)
{
Student p = new Student("里斯", "男", "20");
p.sdu(5);
Person p1 = new Person("里斯", "男", "20");
p1.ToString();
}
}
}
复制代码namespace _1
{
class Person:Object
{
public Person()
{
}
public Person(string name, string sex, string age)
{
this.name = name;
this.sex = sex;
this.age = age;
}
public override string ToString()
{
return "我是:" + name + ",性别:" + sex + ",年龄" + age.ToString();
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private string sex;
public string Sex
{
get { return sex; }
set { sex = value; }
}
private string age;
public string Age
{
get { return age; }
set { age = value; }
}
public virtual void walk()
{
}
public void take()
{
Console.WriteLine("父类。。");
}
}
}
复制代码namespace _1
{
class Student : Person
{
public Student()
{
}
public Student(string name, string sex, string age)
: base(name, sex, age)
{
}
public override void walk()
{
Console.WriteLine("我是:{0} ,性别:{1},年龄:{2}",Name,Sex,Age);
}
public void sdu()
{
Console.WriteLine("我是:{0} ,性别:{1},年龄:{2},步行速度:0", Name, Sex, Age);
}
public void sdu(int a)
{
Console.WriteLine("我是:{0} ,性别:{1},年龄:{2},步行速度:{3}千米/时", Name, Sex, Age, a);
}
public new void take()
{
Console.WriteLine("覆盖");
}
}
}
|