1、定义类的时候不指定父类,则父类是Object类。Object类是任何类的直接或者间接父类。所有类都是Object的子类。
2、例1:
class person
{
public string name
{
get;
set;
}
public int age
{
get;
set;
}
}
public class Chinese:Person
{
public string HuKou{get;set;}
public void KongFu(){....}
}
Chinese p1 = new Chinese();
p1.Name="李雷";
p1.HuKou="北京市朝阳区";
p1.SayHello();
p1.KongFu();
class Chinese:person //继承,:后为父类名
{
string
}
class Japanese:person
{
}
在别的类中调用:
Chinese c=new Chinese(); //拥有person类Chinese类中的所有public要素。
Japanese j=new Japanese(); //拥有person类Japanese类中的所有public要素。
父类的变量可以指向子类的变量。如:
Person p=c; //c从变量看是一个Chinese,所以可以把一个person标签贴到c上。
子类的变量不能直接指向父类的变量,必须要进行显示转换。如:
Chinese c2=p; //错误。p从变量看是一个person,所以不可以把一个Chinese标签直接贴到c上。
Chinese c2=(chinese)p; //正确。如果转换失败,则抛出异常。
Chinese c3=p as chinese; //跟上一行的效果相同,也是显式转换。如果失败,结果是null,不报错。
if(p1 is japanese) //is是运算结果为bool的运算符,表示p1指向的对象是否是指定的类型。
{
Console.writeLine(“日本人”);
}
else if(p1 is chinese)
{
Console.writeLine(“中国人”);
}
3、有new的地方就有对象。方法名可以是中文。类与类之间主要有两种关系:继承、组合。一个类对象可以作为另一个类的成员。类的属性、字段可以是另外一个对象。一个类调用另外一个类实现的动作就叫组合。
4、当new一个子类时,先执行父类,再执行子类。如下面的例子,当B b=new B;时,先执行①,再执行②,即输出:
构造A
构造B
如果A还有父类,则先执行A的父类,再执行A,再执行B,以此类推。
先调用父类的构造函数。
子类可以调用父类中的public成员,但不能调用private成员。如下面的例子中,③不可以调用,④可以。
Protected 保护类,类似于遗产保护类。自己可以调用。子类也可以调用,子类的子类等间接子类也可以调用。其他类不能调用。
class A
{
public A(int i)
{
}
public A()
{
Console.writeLine(“构造A”); //①
}
private void m1()
{
}
publice void m2()
{
}
protected void m3()
{
}
}
class B:A
{
public B() //默认已经有“:base”,调用父类中的无参构造函数,也可以写成public B():base。只是“:base”可忽略不写而已。
{
Console.writeLine(“构造B”); //②
this.m1(); //③,错误,不可调用。Private成员只有自己能调用,儿子也不能调。
this.m2(); //④,正确,可调用
base.m3(); //调用父类的m3。跟“this.m3();”是一样的。C#中Base就是父类、基类的意思,在别的语言中叫super,即超类。
}
}
class program()
{
static void Main(string[] args)
{
B b=new B();
A a=new A();
}
}
5、类的继承与组合:
class LiGang
{
public 打人()
{
Console.WriteLine(“拳打脚踢”);
Console.WriteLine(“飞毛腿”);
Console.WriteLine(“十八掌”);
}
Public 掀摊子()
{
}
}
继承方式实现复用。只有父类的大部分行为、状态都需要的时候才继承。
class LRJ:LiGang
{
}
组合方式实现复用。组合方式没有继承的包袱,用的更多。
class TuFei
{
public LiGang LG{get; set;}
public void 打人()
{
LG.打人();
}
}
调用部分的代码:
TuFei t=new TuFei();
t.LG=new LiGang();
t.打人();