黑马程序员技术交流社区
标题:
里氏转换求解
[打印本页]
作者:
吴承烨
时间:
2013-6-17 18:27
标题:
里氏转换求解
无标题.png
(19.76 KB, 下载次数: 0)
下载附件
2013-6-17 18:26 上传
作者:
一直在努力
时间:
2013-6-17 21:21
没看过..等高手解答
作者:
高腾
时间:
2013-6-17 21:39
你这个就是声明了一个Person类、一个Son类、一个Son1类
Person[] person;不看后面的内容
这就是声明了一个Person类的数组
你不能说person是什么类型
它就是一个数组类型
就好比int[] nums = new int[] nums[n];
你不能说nums是int类型,它就是单独的一中类型,数组类型,只是里面存放的是int类型的数据
作者:
陈壹
时间:
2013-6-17 23:12
person[0]是person类型的。如果你这个能够成功运行,那么son跟son1应该是person的子类
自定义的类一般都是引用类型,当你声明一个变量并赋值时,相当于创建了一个对象和一个变量,并使该变量指向对象。而实际上该对象克同时被多个变量所指向
作者:
Candy小烨
时间:
2013-6-19 06:30
Person[0] 里面的实例对象肯定是 Sun 它进数组后不会改变它本身的数据类型 按照里氏替换原则 那样做一般是为了实现多态
你可以这样试一下 Console.WriteLine(Person.GetType().ToString()); //GetType是获取本身的数据类型
如果你想把它在赋值类子类 可以这样写 Sun sunxxx = Person[0] as Sun; //as是尝试类型转换
作者:
王震
时间:
2013-6-20 22:53
person[0]肯定是一个Person类型 就和定义数组一样的 如:int []a=new int[9]; a[0]中的数肯定是一个int类型的啊。
sun 和sun1还是 Sun类型
person[0]和person[1]可以转换为Sun类型的 Sun s=(Sun)person[0];
在没有发生转换时用sun和sun1可以调用父类和子类的字段方法,person[0]只能调用父类的字段方法。
eg:
namespace 测试1
{
class Program
{
static void Main(string[] args)
{
Sun sun = new Sun("吴沉桦","女","女人",100);
Sun sun1 = new Sun("小明", "男", "男人", 180);
Person[] person = {sun,sun1 };
Console.WriteLine(person[0].name);
Console.WriteLine(sun.sex);
Console.ReadKey();
}
}
public class Sun:Person
{
public string gender = "";
public int height = 0;
public Sun(string Name,string Sex,string Gender,int Height)
:base(Name,Sex)
{
this.gender = Gender;
this.height = Height;
}
}
public class Person
{
public Person(string name,string sex)
{
this.name=name;
this.sex=sex;
}
public string name = "";
//public string Name
//{
// get { return name; }
// set { name = value; }
//}
public string sex = "";
//public string Sex
//{
// get { return sex; }
// set { sex = value; }
//}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2