41.C#--里氏转换法--创建10个对象 通过一个循环 去调用他们各自打招呼的方法

namespace _41.里氏转换法
{
class Program
{
//创建10个对象 通过一个循环 去调用他们各自打招呼的方法
//1、里氏转换
//1)、子类可以赋值给父类
//2)、如果父类中装的是子类对象,那么可以将这个父类强转为子类对象。
static void Main(string[] args)
{
Person[] pers = new Person[10]; //新建10个对象
Random r = new Random(); //声明一个随机数
for (int i = 0; i <pers.Length; i++)//通过循环给Person赋值
{
int rNmuber = r.Next(1, 8);
switch (rNmuber)
{
case 1:pers[i] = new Student(); //当1-7时,子类赋值给父类
break;
case 2:pers[i] = new Teacher();
break;
case 3:pers[i] = new Doctor();
break;
case 4:pers[i] = new Police();
break;
case 5:pers[i] = new Nurse();
break;
case 6:pers[i] = new Driver();
break;
default:pers[i] = new Person();
break;

            }
        }
        for (int i = 0; i < pers.Length; i++)  // 通过一个for循环进行取值
        {
            if(pers[i] is Student)  //如果可以转成student
            {
                ((Student)pers[i]).StudentSayHello(); //父类强转成子类,然后调用打招呼方法
            }
            else if(pers[i] is Teacher)   //如果可以转成Teacher
            {
                ((Teacher)pers[i]).TeacherSayhello();//父类强转成子类,然后调用打招呼方法
            }

            else if(pers[i] is Doctor)
            {
                ((Doctor)pers[i]).DoctorSayHello(); //父类强转成子类,然后调用打招呼方法
            }

            else if(pers[i] is Police)
            {
                ((Police)pers[i]).PoliceSayHello(); //父类强转成子类,然后调用打招呼方法
            }

            else if(pers[i] is Nurse)
            {
                ((Nurse)pers[i]).NurseSayHello(); //父类强转成子类,然后调用打招呼方法
            }
            else if(pers[i] is Driver)
            {
                ((Driver)pers[i]).DriverSayHello(); //父类强转成子类,然后调用打招呼方法
            }
            else
            {
                pers[i].PersonSayHello();
            }

        }
        Console.ReadKey();

    }

//新建类
public class Person //父类
{
public void PersonSayHello()
{
Console.WriteLine("我是父类");
}
}
public class Student:Person
{
public void StudentSayHello()
{
Console.WriteLine("我是学生");
}
}
public class Teacher : Person
{
public void TeacherSayhello()
{
Console.WriteLine("我是老师");
}
}
public class Doctor:Person
{
public void DoctorSayHello()
{
Console.WriteLine("我是医生");
}
}
public class Police : Person
{
public void PoliceSayHello()
{
Console.WriteLine("我是警察");
}
}
public class Nurse : Person
{
public void NurseSayHello()
{
Console.WriteLine("我是护士");
}
}
public class Driver:Person
{
public void DriverSayHello()
{
Console.WriteLine("我是司机");
}
}
}
}

原文地址:https://blog.51cto.com/12679593/2386359

时间: 2024-10-07 17:17:50

41.C#--里氏转换法--创建10个对象 通过一个循环 去调用他们各自打招呼的方法的相关文章

在Salesforce中向外公布Service去创建Lead,并且用Asp.Net去调用此Service

1):在Salesforce中如何配置,向外公布此Service,请看如下链接: http://www.shellblack.com/marketing/web-to-lead/ 2):如何在Asp.Net中调用此Service去创建对应的Lead,请看如下代码: try { StringBuilder data = new StringBuilder(); data.Append("oid=[youroid]"); data.Append("&first_name=

JAVA 创建内部类的对象

1 package Demo519; 2 /* 3 类的第五个成员,内部类 4 1.在类的内部在定义类 5 2.内部类的分类:成员方法内部类(放在方法外) 6 <1>如何创建内部类的对象 7 <2>如何区分调用外部内,内部类的变量 8 <3>局部内部类的使用 9 */ 10 public class TestInnerClass { 11 public static void main(String[] args) { 12 //创建静态内部类的对象,可以直接通过外部类

关于String s = new String(&quot;xyz&quot;); 创建几个对象的问题

引用自这位朋友:http://blog.sina.com.cn/s/blog_6a6b14100100zn6r.html 你知道在java中除了8中基本类型外,其他的都是类对象以及其引用.所以 "xyz "在java中它是一个String对象.对于string类对象来说他的对象值是不能修改的,也就是具有不变性. 看: String   s= "Hello "; s= "Java "; String   s1= "Hello "

Python 面向对象(创建类和对象,面向对象的三大特性是指:封装、继承和多态,多态性)

概念:                                                                                                                                                     ·        面向过程:根据业务逻辑从上到下写垒代码 ·        函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 ·        面向对象:对函数进行分类和封装,

1.22 P235第一题将1—100之间的正整数放在List集合中,并将索引位置是10的对象从集合移除。

1 public class List1 { 2 3 4 public static void main(String[] args) { 5 6 //array 7 8 ArrayList<Integer> list = new ArrayList<Integer>();//创建list 集合 9 10 for(int i=1;i<=100;i++) //list 添加i 11 { 12 list.add(i); 13 } 14 list.remove(10); //移除索

Effective Java 读书笔记(2创建和销毁对象)

第一章是引言,所以这里不做笔记,总结一下书中第一章的主要内容是向我们解释了这本书所做的事情:指导Java程序员如何编写出清晰.正确.可用.健壮.灵活和可维护的程序. 2.1考虑用静态工厂方法代替构造器 静态工厂方法与构造器相比有四大优势: (1)静态工厂方法有名称,具有适当名称的静态工厂方法易于使用.易于阅读: (2)不必每次在调用它们的时候都创建一个新的对象: (3)可以返回原返回类型的任何子类型的对象: (4)在创建参数化类型实例的时候,它们使代码变得更加简洁. 同时静态工厂方法也有两大缺点

2015/10/9 Python基础(21):可调用和可执行对象

在Python中有多种运行外部程序的方法,比如,运行操作系统命令或另外的Python脚本,或执行一个磁盘上的文件,或通过网络来运行文件.这完全取决于想要干什么.特定的环境包括: 在当前脚本继续运行 创建和管理子进程 执行外部命令或程序 执行需要输入的命令 通过网络来调用命令 执行命令来创建需要处理的输出 执行其他的Python脚本 执行一系列动态生成的Python语句 导入Python模块 Python中,内建和外部模块都可以提供上述各种功能.程序员得根据实现的需要,从这些模块中选择合适的处理方

[Effective Java]创建和销毁对象

第一条:考虑用静态工厂方法代替构造器 使用静态工厂方法的优势: 静态工厂方法具有名称,具有适当名称的方法更易阅读. 具有多个构造器的类用户往往不知道该用哪个,可考虑提供多个合适命名的静态工厂方法. 相比于构造器,不必再每次调用时都创建一个新对象 不可变类可以预先创建好实例,或者将构件好的实例缓存起来,从而避免重复创建对象.此方法类似于Flyweight模式.如果程序经常请求创建相同的对象,并且创建对象的代价很高,此项技术可以极大地提升性能.  可以返回原返回类型的任意子类型 在选择返回对象的类时

Java进阶 创建和销毁对象

最近准备写点Javase的东西,希望可以帮助大家写出更好的代码. 1.给不可实例化的类提供私有构造器 比如:每个项目中都有很多工具类,提供了很多static类型的方法供大家使用,谁也不希望看到下面的代码: TextUtils textUtils = new TextUtils(); if(textUtils.isDigitsOnly("123")) { //doSometing }else { //doSomething } 自己写个工具类,总有人喜欢先初始化个实例在调用方法,然后还附