码迷,mamicode.com
首页 > 其他好文 > 详细

继承和多态的一些事

时间:2016-04-10 23:57:39      阅读:354      评论:0      收藏:0      [点我收藏+]

标签:



一.继承

  首先我们了解一下什么是继承,举个简单的例子,继承就是子类继承父类的属性比如你定义了一个汽车类,然后设置他的属性是四个轮子

  你再定义一个小轿车类,继承汽车类,那他的属性就是四个轮子以及还有你要设置的别的属性。

1.继承分为父类和子类:

 

    子类:派生类

 

    父类:基类或者超类

 

2.什么条件的类可以使用继承??

 

    满足is a关系的两个类可以使用继承。

 

例如:

 

       学生 is  a Person

继承的优点:

   减少代码冗余,实现代码复用

具体例子如图所示:(用一个动物类(父类)和狗类(子类))

创建出Animal(父类)、Dog(子类)

关键代码如下:

父类:

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Chap06
{
    public class Animal
    {
        //定义自动属性 年龄和姓名
        public int Age { get; set; }

        public string Name { get; set; }

        //无参构造
        public Animal()
        { 
        
        }

        //带参构造
        public Animal(int age,string name)
        {
            this.Age = age;
            this.Name = name;
        }
    
    }
}
技术分享

子类:

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Chap06
{
  public  class Dog:Animal
    {

        public string Color{ get; set; }

        //无参构造
        public Dog()
        { 
        
        }
        //带参构造
        public Dog(int age,string name,string color)
        {
            this.Age = age;
            this.Name = name;
            this.Color = color;
        
        }

        public void Eat()
        {
            Console.WriteLine("Dog Eat Meat Very Happy!");
           
        }
    }
}
技术分享

Main方法:

技术分享
namespace Chap06
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建Dog对象
            Dog dog = new Dog();
            //调用子类中的Eat()方法
            dog.Eat();

            Console.ReadKey();


        }
    }
}
技术分享

疑难解析:

如果我们想构建一个子类对象...

  (1)、进入子类构造方法名,但不进入子类构造的方法体

  (2)、跳转到父类构造方法名,接下来执行父类构造的方法体

  (3)、父类方法体执行完毕,跳转到子类方法体执行

  (4)、子类方法体执行完毕,跳转到Main函数,代表子类对象创建过程

 

技术分享

: 继承关系在类图中表示为一个箭头,箭头指向的是父类。

   子类可以继承父类的非私有成员

   一个子类只能有一个直接父类

   子类构造默认会调用父类的无参构造

二:base关键字

  解析:

  ①:父类的实例

  ②:看成是调用父类的构造,只出现在子类构造后面

  ③:base(参数列表)父类带参构造的参数列表一致

  ④:相当于方法调用,不带有数据类型

技术分享

 

三:访问修饰符

  ①:Public:任何位置都能访问(方法,成员变量,类)

  ②:Private:只能当前类自身访问,出了类所在{}无法访问(方法,成员变量)

  ③:Protected:当前类和子类能访问及子类的子类(孙子类)(方法以及变量)

  ④:Internal:只能在当前程序集中使用

  三种访问修饰符对类成员的访问限制强度:Private>Protected>Public

 

四:继承的特性:(又是这个很普遍的例子,形象的说明了集成的特性。)

        ①:传递性         ②:单根性

 ①:传递性:如果一个类B继承自类A,而类C又继承类B,那么类C也可以访问到类A中非私有成员

技术分享

 

②:单根性(C#不支持多继承 Java也不支持多继承)

 

技术分享

五:实现多态

概念:不同的对象对于同一个操作,做出的响应不同,那么这种情况在面向对象编程中就称为多态。

使用多态的目的:为了统一调用。

实现多态的方式:

①:通过虚方法实现多态

实现多态的步骤:

  (1).在父类中通过virtual关键字定义一个虚方法

  (2).在子类中通过override关键字对父类中的虚方法进行重写

  (3).调用的时候,调用的是子类的方法

技术分享

 

Main方法进行创建对象以及遍历集合:

技术分享
namespace Chap06多态
{
    class Program
    {
        static void Main(string[] args)
        {
            Chinese chinese = new Chinese();

            American american = new American();

            Korea korea = new Korea();

            Person[] p =
            {
            chinese,american,korea
            
        };
            //遍历集合中的元素,调用对应子类中的Hello方法
            foreach (Person item in p)
            {
                item.Hello();
            }
            Console.ReadLine();
        }
    }
技术分享

 

 

 

 

 

 

继承和多态的一些事

标签:

原文地址:http://www.cnblogs.com/hq-123/p/5376441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!