namespace projGetMaxScore
{
public class Pet:Object//默认继承Object,可以省略不写
{
public Pet(string name)
{
_name = name;
}
protected string _name;//保护的,派生类才能访问
virtual public void Printname()
{
Console.WriteLine("Pet's name is "+ _name);
}
}
public class Dog:Pet{
public Dog(string name):base(name)//引用基类默认值
{
}
}
public class Cat:Pet {
public Cat(string name):base(name)
{
}
override public void Printname()//隐藏继承方法
{
Console.WriteLine("宠物的名字是 "+ _name);
}
}
class Program
{
static void Main(string[] args)
{
Pet[] pets=new Pet[]{new Dog("jack"),new Cat("tom")};
for(int i=0;i<pets.Length;i++)
pets[i].Printname();
}
}
}
调用顺序
ij
调用当前类的其他构造函数
调用基类构造函数
调用基类构造函数
派生类及构造函数:
调用顺序:
1、实例成员初始化
2、基类构造函数
3、派生类构造函数
派生类调用基类的构造函数
隐式默认调用 但是显式可以传参数
派生类构造函数调用顺序
派生类的调用顺序:实例成员初始化,基类构造函数,最后调用派生类的构造函数。
调用基类用base,调用本类用this。
基类和派生类构造时调用顺序(现有父再有子)
调用当前类的构造函数
隐式调用基类构造函数,显示调用基类构造函数
派生类的构造函数的顺序
派生类的构造函数
在定义类时通过":父类名"这种格式进行继承。
构造方法()隐式;
构造方法():base()显式。
【构造函数】
作用:派生类对象中,包含基类的信息,在执行派生类的构造函数的时候,会先去隐式或显式的,调用基类构造函数。因为是有了基类才有派生类
调用顺序:引用类的 实例成员初始化>基类>引用类
【在派生类中直接调用基类构造函数】
实例:基类
基类私有属性 protected string _Name;
基类定义构造函数public Pet(string name){_Name = name;}
派生类引用基类构造函数(通过base直接去引用基类构造函数)
派生类定义构造函数public Dog(string name):base(name){}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Pet
{
protected string _Name;
public Pet(string name)
{
_Name = name;
}
public void a()
{
Console.WriteLine("size:");
}
virtual public void b()
{
Console.WriteLine("fb:");
}
public void c()
{
Console.WriteLine(_Name);
}
}
class Cat:Pet
{
public Cat(string name) :base( name)
{
}
new public void a()
{
Console.WriteLine("13:");
}
override public void b()
{
base.b();
}
}
class Program
{
static void Main(string[] args)
{
//Console.Write("input:");
//string a = Console.ReadLine();
//Console.WriteLine(":" + a);
////得到字节长度
//Console.WriteLine("size:" + sizeof(int));
int[,] bb = new int[0,1];
Cat b = new Cat("66");
b.a();
b.b();
b.c();
Console.ReadKey();
}
}
}
隐式默认调用 但是显式可以传参数
构造函数的定义
基类中的字段初始化为私有的,需要写出保护的,在派生类中才可以访问
protected 关键字
调用当前类的其他构造函数:
Pet():base()
{
}
派生类及构造函数调用顺序:
调用基类构造函数:隐式、显式。
加“_" 表示私有化
派生类对象中,有一部分是基类部分,在执行派生类的构造函数体之前,将会隐式或显式调用基类构造函数。
调用顺序:实例成员初始化->基类构造函数->派生类构造函数
this,调用当前类的其他构造函数,可以有参数也可以没有参数,可以用来调用进行公共初始化的函数
顺序 先调用积累的构造函数,再调用派生类的构造函数