黑马程序员技术交流社区
标题:
怎么打印出Say方法
[打印本页]
作者:
吴承烨
时间:
2013-6-17 17:51
标题:
怎么打印出Say方法
本帖最后由 吴承烨 于 2013-6-18 20:55 编辑
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 里氏转换数组
{
class Program
{
static void Main(string[] args)
{
//用数组弄2个人出来
Sun sun = new Sun("吴沉烨", "女", "女人", 100);
Sun1 sun1 = new Sun1("小明", "男", "男人", 180);
Preson[] preson = { sun, sun1 };
for (int i = 0; i < preson.Length; ++i)
{
//循环里头怎么打印出Say方法
}
//((Sun)preson[0]).Say();
//((Sun1)preson[1]).Say();
Console.ReadKey();
}
}
//父类
class Preson
{
public Preson(string name, string gender, string hobby)
{
this.name = name;
this.gender = gender;
this.hobby = hobby;
}
//姓名
string name;
public string Name
{
get { return name; }
set { name = value; }
}
//性别
string gender;
public string Gender
{
get { return gender; }
set { gender = value; }
}
//爱好
private string hobby;
public string Hobby
{
get { return hobby; }
set { hobby = value; }
}
//方法
public void SayHello()
{
Console.WriteLine("我叫{0},性别{1},爱好{2}", name, gender, hobby);
}
}
//子类1
class Sun : Preson
{
//构造方法
public Sun(string name, string genter, string hobby, int fenshu)
: base(name, genter, hobby)
{
this.fenshu = fenshu;
}
//分数
int fenshu;
public int Fenshu
{
get { return fenshu; }
set { fenshu = value; }
}
public void Say()
{
Console.WriteLine("我的名字叫{0},性别{1},爱好{2},分数{3}",Name,Gender,Hobby,fenshu);
}
}
//子类2
class Sun1 : Preson
{
//构造方法
public Sun1(string name, string genter, string hobby,int shengao)
: base(name, genter, hobby)
{
this.shengao = shengao;
}
//身高
int shengao;
public int Shengao
{
get { return shengao; }
set { shengao = value; }
}
public void Say()
{
Console.WriteLine("我的名字叫{0},性别{1},爱好{2},身高{3}", Name, Gender, Hobby, Shengao);
}
}
}
复制代码
作者:
成都—陈超
时间:
2013-6-17 21:36
这样可以做到吧 如果不管性能什么的 只达到现在的小目标
try
{
((Sun)preson[i]).Say();
}
catch
{
((Sun1)preson[1]).Say();
}
作者:
成都—陈超
时间:
2013-6-17 21:37
当循环到第二个sun1时 try里面会出异常 catch就能捕捉异常 再在catch里处理就行了, 把person[1]转成sun1就行了
作者:
吴承烨
时间:
2013-6-17 21:48
谢谢你,看完这么长代码,答复我.
你的代码,局限性太大.只能适合做这题.
作者:
吴承烨
时间:
2013-6-17 21:48
谢谢你,看完这么长代码,答复我.
你的代码,局限性太大.只能适合做这题.
作者:
changweihua
时间:
2013-6-18 14:05
吴承烨 发表于 2013-6-17 21:48
谢谢你,看完这么长代码,答复我.
你的代码,局限性太大.只能适合做这题.
你的父类和子类设计的不合理,既然使用了继承,要么在父类中定义成虚方法,要不抽象出接口
作者:
成都—陈超
时间:
2013-6-18 21:29
吴承烨 发表于 2013-6-17 21:48
谢谢你,看完这么长代码,答复我.
你的代码,局限性太大.只能适合做这题.
用多态:在父类中写虚方法vritual Say(),然后在子类中override Say(),然后不转换直接用Person
调用Say()方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2