c#之继承

上一篇 / 下一篇  2014-04-30 17:23:15 / 个人分类:C#

继承的一些规则:
(a)其成员被继承的类叫基类也称父类,继承其成员的类叫派生类也称子类。
(b)所有类的最高父类:Object。
(c)构造函数不继承,派生类会自动调用基类构造函数。
(d)基类可以定义虚方法、虚属性,它的派生类能够重载这些成员,展示出动态性。
(e)派生类只能单继承,但具有传递性,即ClassB 派生出 ClassC,ClassA 派生出 ClassB,则 ClassC 会继承 ClassB 和 ClassA 中声明的成员。
(f)C#可以把类和方法声明为sealed,对于类来说,这表示不能继承该类;对于方法来说,这表示不能重写该方法。

继承里的构造函数
(a)派生类构造函数自动调用基类的不带参数的构造函数
public class B: A
{
    public B()
    {
    }
}
相当于public class B: A
{
    public B():base()
    {
    }
}
(b)基类中带参数的构造函数必须显式调用,如果基类定义了带有参数的构造函数,那么此构造函数必须被执行,且在派生类中实现该构造函数,此时我们可以使用base关键字
public class  A
{
    public A(string str)
    {
    }
}
public class B:A
{
    public B():base("aaa")
    {
    }
}
示例1:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace JiChen
{
    public class ParentClass
    {
        public ParentClass()
        {
            Console.WriteLine("父类构造函数。");
        }
        public void print()
        {
            Console.WriteLine("I'm a Parent Class。");
        }
    }
    public class ChildClass : ParentClass
    {
        public ChildClass()
        {
            Console.WriteLine("子类构造函数。");
        }
        public static void Main()
        {
            ChildClass child = new ChildClass();
            child.print();
            Console.ReadKey();
        }
    }
}
示例2:
class A
    {
        int test=0;
        public A(int i)
        {
            test = i;
            Console.WriteLine("I am A 公有有参构造函数 ,test={0}", test);
        }
    }
    class B : A 
    {
        public B(int j):base(j)  //派生类调用基类的方法:先调用基类构造函数
        {
            Console.WriteLine("I am B 公有有参构造函数,j={0}",j);
        }
    }
    class InheritanceTest1 
    {
        static void Main(string[] args)
        {
            B b = new B(1);
            Console.Read();
        }
    }
示例3:
using System ;
  public class Parent
  {
  string parentString;
  public Parent( )
  { Console.WriteLine("Parent Constructor.") ;
  }
  public Parent(string myString)
  {
  parentString = myString;
  Console.WriteLine(parentString) ;
  }
  public void print( )
  {
  Console.WriteLine("I'm a Parent Class.") ;
  }
  }

  public class Child : Parent
  {
      //分号":"和关键字base用来调用带有相应参数的基类的构造函数。
  public Child( ) : base("From Derived")
  { Console.WriteLine("Child Constructor.") ; }
     //Child的print( )方法覆盖了Parent中的 print 方法。
  public void print( )
  {
  base.print( ) ;
  Console.WriteLine("I'm a Child Class.") ;
  }
  public static void Main( )
  {
   Child child = new Child( ) ;
   child.print( ) ;
     //显式类型转换,可以在派生类中进行数据类型的转换,使其成为基类的一个实例
  ((Parent)child).print( ) ;
     Console.ReadKey();
  }
  }

sealed 修饰符
C#提供了一个sealed 修饰符,此修饰符会阻止其他类从该类继承。
 sealed class A
示例:
    {
        int test;
        public void Sum(int i,int j)
        {
            int sum = i + j;
            Console.WriteLine("I am A ,my sum ={0}",sum);
        }
    }
    class B : A 
    {
        public void Minus(int i,int j)
        {
            int minus = i - j;
            Console.WriteLine("I am B ,my minus ={0}", minus);
            this.Sum(3, 4);       //编译器会报错     
        }
     }


TAG:

 

评分:0

我来说两句

日历

« 2024-05-02  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 29395
  • 日志数: 27
  • 建立时间: 2014-03-18
  • 更新时间: 2014-07-10

RSS订阅

Open Toolbar