class parten
{
public parten()
{
Console.WriteLine("我是基类的无参构造器");
}
public parten(int i)
{
Console.WriteLine("我是基类的带一个整形参数的有参构造器");
}
public parten(string name)
{
Console.WriteLine("我是基类的带一个字符串参数的有参构造器");
}
public parten(int i, string name)
{
Console.WriteLine("我是基类的带两个参数的有参构造器");
}
public void Anomile(string name)
{
Console.WriteLine("这是动物在叫");
}
}
class children:parten
{
public children()
{
Console.WriteLine("我是派生类的无参构造器");
}
public children(int i)
{
Console.WriteLine("我是派生类的带一个整形参数的有参构造器");
}
public children(string name)
{
Console.WriteLine("我是派生类的带一个字符串参数的有参构造器");
}
public children(int i, string name)
{
Console.WriteLine("我是派生类的带两个参数的有参构造器");
}
}
class Program
{
static void Main(string[] args)
{
children ch = new children();
ch.Anomile("ni");//很明显在基类中有个公有的方法,而继承类中是没有任何方法的,但是New
//继承类的时候,虽然继承类没有任何方法但是生成继承类的对象后,当点的时候
//它就会自动有基类中的公有方法。这就是面向对象的继承机制!!!
Console.ReadKey();
}
}
说明:前面的是无重名的方法的时候,那么如果有时,对于基类已有定义的方法,打算重新定义自己的实现。
Child类可以自己重新定义print( )方法的实现。Child的print( )方法覆盖了Parent中的 print 方法。结果是:除非经过特别指明,Parent类中的print方法不会被调用。
3.在Child类的 print( ) 方法中,我们特别指明:调用的是Parent类中的 print( ) 方法。
方法名前面为"base", 一旦使用"base"关键字之后,你就可以访问基类的具有公有或者保护权限的成员。 Child类中的print( )方法的执行结果出现上面的第三行和第四行。
4:访问基类成员的另外一种方法是:通过显式类型转换。
在Child类的Main( )方法中的最后一条语句就是这么做的。记住:派生类是其基类的特例。这个事实告诉我们:可以在派生类中进行数据类型的转换,使其成为基类的一个实例。上面代码的最后一行实际上执行了Parent类中的 print( )方法。即:((Parent)child).print( ) ;
5:有两个类一个是基类,一个是继承类,如果基类中有个方法比如说:是printer()方法当然这个 方法是公有的方法,如果在它的继承类中也有一个同名方法,如果这时候不作任何处理的话
编译也能通过但是系统会发出一个没有隐藏基类同名方法的警告,如果想使系统健壮那么必须 隐藏基类的同名方法,这时候用到New关键字,形式是: new public void print ();这个New关键字一定是在Public关键字之前,这时候默认的是调用的是继承类中的这个同名方法,如果你想调用基类中同名的这个方法的时候,这时候必须(1):如果是个实例方法,必须先生成实例在加上实例名.方法名的形式去调用基类同名方法,形式://访问隐藏基类的 print():
Console.WriteLine(MyBase.print());
(2):如果是静态方法直接用基类名.方法名();即可!
特别注意的是:这种方式同样可以用在字段,属性和事件上!
{
public parten()
{
Console.WriteLine("我是基类的无参构造器");
}
public parten(int i)
{
Console.WriteLine("我是基类的带一个整形参数的有参构造器");
}
public parten(string name)
{
Console.WriteLine("我是基类的带一个字符串参数的有参构造器");
}
public parten(int i, string name)
{
Console.WriteLine("我是基类的带两个参数的有参构造器");
}
public void Anomile(string name)
{
Console.WriteLine("这是动物在叫");
}
}
class children:parten
{
public children()
{
Console.WriteLine("我是派生类的无参构造器");
}
public children(int i)
{
Console.WriteLine("我是派生类的带一个整形参数的有参构造器");
}
public children(string name)
{
Console.WriteLine("我是派生类的带一个字符串参数的有参构造器");
}
public children(int i, string name)
{
Console.WriteLine("我是派生类的带两个参数的有参构造器");
}
}
class Program
{
static void Main(string[] args)
{
children ch = new children();
ch.Anomile("ni");//很明显在基类中有个公有的方法,而继承类中是没有任何方法的,但是New
//继承类的时候,虽然继承类没有任何方法但是生成继承类的对象后,当点的时候
//它就会自动有基类中的公有方法。这就是面向对象的继承机制!!!
Console.ReadKey();
}
}
说明:前面的是无重名的方法的时候,那么如果有时,对于基类已有定义的方法,打算重新定义自己的实现。
Child类可以自己重新定义print( )方法的实现。Child的print( )方法覆盖了Parent中的 print 方法。结果是:除非经过特别指明,Parent类中的print方法不会被调用。
3.在Child类的 print( ) 方法中,我们特别指明:调用的是Parent类中的 print( ) 方法。
方法名前面为"base", 一旦使用"base"关键字之后,你就可以访问基类的具有公有或者保护权限的成员。 Child类中的print( )方法的执行结果出现上面的第三行和第四行。
4:访问基类成员的另外一种方法是:通过显式类型转换。
在Child类的Main( )方法中的最后一条语句就是这么做的。记住:派生类是其基类的特例。这个事实告诉我们:可以在派生类中进行数据类型的转换,使其成为基类的一个实例。上面代码的最后一行实际上执行了Parent类中的 print( )方法。即:((Parent)child).print( ) ;
5:有两个类一个是基类,一个是继承类,如果基类中有个方法比如说:是printer()方法当然这个 方法是公有的方法,如果在它的继承类中也有一个同名方法,如果这时候不作任何处理的话
编译也能通过但是系统会发出一个没有隐藏基类同名方法的警告,如果想使系统健壮那么必须 隐藏基类的同名方法,这时候用到New关键字,形式是: new public void print ();这个New关键字一定是在Public关键字之前,这时候默认的是调用的是继承类中的这个同名方法,如果你想调用基类中同名的这个方法的时候,这时候必须(1):如果是个实例方法,必须先生成实例在加上实例名.方法名的形式去调用基类同名方法,形式://访问隐藏基类的 print():
Console.WriteLine(MyBase.print());
(2):如果是静态方法直接用基类名.方法名();即可!
特别注意的是:这种方式同样可以用在字段,属性和事件上!