A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ljh4282158 中级黑马   /  2013-6-12 10:51  /  1485 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、继承
*****语法
class Dog:Animal
{
  .............
}
//私有的内容无法继承

***构造函数无法继承,但在子类中可以调用父类构造函数
例子:
public Dog() { }
        public Dog(double height, double weight, string sex, int legs)
            : base(height, weight, sex)//base就是指父类,这里调用父类的构造函数来完成一些初始化操作
        {
            this.legs = legs;
        }
****虚方法
//virtual关键词可声明为虚方法,
        //可以在子类中被重写(override//重写关键字)
class Animal

   public virtual void Eat()
        {
            Console.WriteLine("动物吃饭");
        }

class Dog
{
   //重写override父类中的虚方法virtual
        public override void Eat()
        {
            Console.WriteLine("狗爱啃骨头");
        }
}

****在子类中使用new隐藏父类方法
//当子类和父类方法重名时使用new把父类方法名隐藏掉

class Animal

   public virtual void Say()
        {
            Console.WriteLine("动物吃饭");
        }

class Dog:Animal
{

        public new void Say()
        {
            Console.WriteLine("狗爱啃骨头");
        }
}
***在子类中调用父类方法
base.方法名

******重写微软定义的虚方法
例子:
//override从写微软定义的虚方法
        public override string ToString()
        {
            return string.Format("{0}\t{1}\t{2}\t{3}", Height, Weight, Sex, Legs);
        }

//c#中类不能多继承,但可以多层继承

class Animal
{}
class Human:Animal
{}
class Student:Animal
{}
--------------------------------------------------
二、抽象类
****定义语法
abstract class 类名

{
......
}

*****抽象类与普通类的比较
相同点:普通类能定义的内容在抽象类里面都可以定义
不同点:抽象类里面可以定义抽象方法,但普通类不能

****抽象方法的定义
例子:
//抽象类里面可以定义抽象方法
        public abstract void Eat();
        //抽象方法是没有方法体的(没有实现方法的功能)
        public abstract void Say();
****抽象了的继承问题
抽象类是用来被继承的
抽象类的抽象方法在子类(不是抽象类)中必须全部被实现
    //因为普通类里面不能有抽象方法
    //实现抽象方法通过override,跟重写父类的虚方法关键词一样。

abstract class Animal
{
     public abstract void Eat();
}
class Cat : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("猫爱吃鱼");
        }
    }
abstract Fish:Animal
{
  //抽象类可以继承抽象类
}

****抽象类的实例化问题
抽象类不能被直接实例化,他是用来被继承的
//抽象类的实例化是通过他的子类来实现的
例子:
Animal a;
a = new Cat();//实例化一个子类赋给抽象类的对象
  -------------------------------------------------      
三、接口
***定义语法
interfase 接口名//名称要有一个大写前缀I,如:IAnimal
{
   ...
}

/接口是对方法的约束,是一种规范
例子:
interface IAnimal
    {
        //报错public void Run() { }//接口中不能有方法的实现
        //报错public IAnimal() { }//接口中没有构造函数
        //报错public void Walk();//接口中不能写访问修饰符,
        void Walk();//接口默认唯一的访问修饰符就是public  但是不能写出来
        void Eat(DateTime time);
        //报错string name;//接口不能包含字段
        string Name//接口中可以定义属性
        {
            get;
            set;
        }
    }

*****接口的继承问题
//用类来继承接口,接口也可以继承接口
    //类继承接口,必须把接口的属性和方法全部实现
一个类可以同时继承多个接口
例子:
class Beep : IAnimal, IRobot
    {
        //要想IAnimal和IRobot接口的Walk方法实现不一样,那么必须显示的实现这两个方法
        //要想和接口的Walk方法实现不一样,那么必须显示的实现这两个方法
        //显示实现接口中的方法时不能加反问修饰符

        void IAnimal.Walk()//接口名打点方法名
        {
            Console.WriteLine("动物走路");
        }
        void IRobot.Walk()
        {
            Console.WriteLine("机器人走路");
        }
     }
****接口的使用
例子:
//IAnimal ia;//声明一个接口对象
            //ia = new Dog();
各个接口只能调用自己定义的方法和属性等内容


-------------------------------------------------------
四、静态
****定义语法
static class 类名
{
  ...
}
静态类中的字段、属性、方法必须全是静态的
普通类中也可以定义静态的字段,属性,方法

*******静态类的使用
//在静态方法里面如果要使用方法外面定义的变量,那个变量必须也是静态的
//静态的属性和方法可以直接类名打点属性或方法名字节使用

****注意问题
//静态类不用实例化  直接打点
类的对象不能使用静态的字段、属性、方法
静态的内容(字段、属性、方法)是属于类的  不属于类的对象//直接类名打点

评分

参与人数 1技术分 +2 收起 理由
杞文明 + 2

查看全部评分

3 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
值得学习ing!
回复 使用道具 举报
不错  值得顶一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马