1、单元3 面向对象的C#知识目标 v(1)理解面向对象的封装性、继承性和多态性;v(2)掌握类的定义;v(3)掌握静态方法和静态类;v(4)掌握C#的继承语法;v(5)掌握接口的声明和实现的语法;v(6)理解抽象方法和接口的作用。能力目标v(1)能理解面向对象的封装性、继承性、多态性;v(2)能将常见的事物抽象成恰当的类;v(3)能正确定义类和类的成员,能使用访问修饰符控制封装程度;v(4)能以对象及对象与对象的相互作用来分析问题;v(5)能以继承表示实际问题中分类;v(6)能理解并使用接口约定不同类型对象的行为;v(7)能理解接口和抽象类的差别。教学任务v任务1 类的定义及使用v任务2 构造函
2、数、静态成员和命名空间v任务3 类的继承v任务4 多态v任务5 接口单元3 面向对象的C#任务3 类的继承引例v定义一个Animal类,包含Type属性,toString()方法和sound()方法,并派生出Dog类、Cat类,派生类拥有另外一个属性Name。知识储备v知识点1:类的继承。v知识点2:继承隐私保护。v知识点3:继承时构造函数的调用。知识点1:类的继承vC#是一种面向对象的编程语言,它同样具有面向对象编程的一些特点。前面我们已经详细了解了类、对象、属性和构造函数等,它们是面向对象的基础知识,面向对象编程的更深层次的问题包括了继承性、多态性和异常等其他一些相关的知识。v继承性是从现
3、有的类中派生出新类的功能,它能分析多态性的细微差别,并允许创建类层次结构,使用继承可以创建一个定义了多个相关项目共有特性的通用类。定义派生类v派生类能够继承基类的方法、特性等,但继承得到的成员也受作用域的限制,即使派生类继承得到基类成员,也可能无法访问。v派生类一般格式:类型修饰符 class 类名:基类名 派生类成员;示例 public class A public A()public void doA()public class B:A public B()public void doB()public class Tester public void Main()A a=new A();
4、B b=new B();b.doB();b.doA();a.doA();a.doB();/非法继承 B b1=new B();A a1=(A)b1;/B对象可以调用强制转化为A类型,因为B继承自A 知识点2:继承隐私保护修饰符类内部子类其他类public可以可以可以protected可以可以不可以private可以不可以不可以说明:如果父类中的成员只允许父类独有,不允许子类或其他类访问,则使用访问修饰符private,也就是说使用了private修饰符则只能在父类中使用。如果父类中的成员,只允许父类和其派生类访问,不允许其他类访问,则在父类中用protected修饰该成员,当使用“base”关
5、键字时,是可以访问父类成员的。实践任务1v描述一个长方体类(包含长宽高,带三个参数的构造函数,以及体积计算方法),并派生一个正方体类。知识点3:继承时构造函数的调用v构造函数调用:如果派生类的基类本身是另一个类的派生类,则构造函数的调用次序按由高到低顺序依次运行。public class A public A()Console.WriteLine(A的构造函数);public class B:A public B()Console.WriteLine(B的构造函数);public class C:B public C()Console.WriteLine(C的构造函数);class Progr
6、am static void Main(string args)C c=new C();Console.ReadKey();【例3-9】由长方形类派生出正方形类,正方形类的构造函数调用基类的构造函数。class Rectangle protected double length;private double width;public Rectangle(double l,double w)length=l;width=w;class Square:Rectangle public Square(double l):base(l,0)public double Area()return leng
7、th*length;class Program static void Main(string args)Console.WriteLine(请输入正方形的长:);Square s=new Square(double.Parse(Console.ReadLine();Console.WriteLine(正方形的面积为:0,s.Area();Console.ReadKey();继承的特性v1、传递性v子类的子类具备其父类以及父类父类的属性和方法。v2、单根性vC#的继承有一个很重要的特性,继承是单继承,不支持多继承,即,一个子类只能有一个父类。v3、密封性v在.NET类库中,绝大多数类可以以基类
8、产生派生类。因为从面向对象编程的思想看,类具有开发性,即一个类为了具有很好的扩展性,是不能密封的,因为类一旦密封,则该类不再具有扩展的空间。密封类v密封类定义一般格式:访问修饰符 sealed class 类名称密封方法v一般格式:public class A public sealed void show()Sealed类与方法v被声明为sealed的类不能被继承v被声明为sealed的方法不能被重写调用基类的同名方法v已替换或重写了某个方法的派生类仍可以使用 base 关键字访问基类中的该方法。在派生类中声明与基类同名的方法,也叫方法的重写。在派生类重写基类方法后,如果想调用基类的同名方法
9、,使用base关键字 public class A public void DoWork()public class B:A public new void DoWork()base.DoWork();/A类的DoWork()方法 归纳总结v知识要点:v(1)派生类的定义方法;v(2)protected访问修饰符作用;v(3)继承的顺序,继承的特点子类只能继承自一个父类;v(4)构造函数和方法的继承;引例分析与实现v定义一个Animal类,包含Type属性,toString()方法和sound()方法,并派生出Dog类、Cat类,派生类拥有另外一个属性Name。并在测试类中测试定义的类。cla
10、ss Animal private string type;public string Type get return type;set type=value;public string toString()return 这是一个动物类;public void sound()Console.WriteLine(动物声音);class Cat:Animal private string name;public string Name get return name;set name=value;private string breed;public string Breed get return
11、 breed;set breed=value;public string toString()return Cats name is+name+,属于 +breed+,在被抚摸感到舒服的时候,会;public void sound()Console.WriteLine(喵喵叫);class AnimalTest static void Main(string args)Animal d1=new Dog();Animal c1=new Cat();Dog d=new Dog();d.Name=吉娃娃;d.Breed=哺乳类和肉食性;Console.Write(d.toString();d.sound();Cat c=new Cat();c.Name=波斯猫;c.Breed=哺乳类和肉食性;Console.Write(c.toString();c.sound();Console.ReadKey();拓展实践v定义一个交通工具(Vehicle)类,拥有轮子和重量两个公共属性,并派生出小汽车(Car)类添加载客人数属性,并定义显示车辆信息的方法。