永发信息网

c#或java里子类对象赋值给父类有什么用,举几个例子啊。

答案:2  悬赏:0  手机版
解决时间 2021-01-24 10:34
  • 提问者网友:献世佛
  • 2021-01-23 12:33
我看视频学的。 它里面是如下代码,绕来绕去的有什么意义啊。
//Person是父类 ,父类函数PersonSay()

Person p = new Student();
p.PersonSay();
Student s=(Student )p; //把p强转为Student类型后赋给s
s.StudentSay();

是叫里氏转换吧,我想知道它的实际用途,求举例啊。
最佳答案
  • 五星知识达人网友:雾月
  • 2021-01-23 13:56
里氏替换原则:

定义一:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。
定义二:所有引用基类的地方必须能透明地使用其子类的对象。

大概的要求是:

1、父类对象指向子类实例,向上转型和向下转型是里氏替换的一种应用。

2、子类必须完全实现父类的方法,父类对象出现的地方都可以用子类对象进行替换。

这是里氏替换的主要内涵,下面对这两种体现分别进行代码举例。

定义一个抽象类Person:

public abstract class Person{

public abstract String getDetails();

}

用Student类来继承Person

public class Student extends Person{

private String stuName;

private int age;

private double score;

public Student() {

super();

// TODO Auto-generated constructor stub

}

public Student(String stuName, int age, double score) {

super();

this.stuName = stuName;

this.age = age;

this.score = score;

}

@Override

public String getDetails() {

// TODO Auto-generated method stub

return this.stuName + this.age + this.score;

}
}

在Test类里面可以用:

Person person = new Student();//这是向上转型。

也可以定义:

Student student = new Student(“stu”,19,99);

可以将student对象用在所有应该使用Person类型的地方。

Private List person = new ArrayList();

Person.add(student);
全部回答
  • 1楼网友:妄饮晩冬酒
  • 2021-01-23 14:48
举个例子: 你第一天去学校上课,假如其他同学你都不认识,你知不知道别的同学会些什么?(可能你同桌会弹吉他,你前面的同学很会唱歌),这些在你和他们第一次见面的时候你是不知道。老师也不知道,老师想要某一个学生站起来回答问题,老师知道不管是哪个学生都会双腿站起来,都会说中国话(当然这是在班级里没有残疾人的情况下),知道这两点老师就可以叫某个学生起来回答问题了,对吧。 在这个例子里,会说中国话就代表你的PersonSay()方法,老师就是使用你这个方法的人,那么老师还需不需要知道具体是哪个学生了?不需要了,可以随意点名,因为这个班级里都是人类,都会站起来说中国话
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯