我看视频学的。 它里面是如下代码,绕来绕去的有什么意义啊。
//Person是父类 ,父类函数PersonSay()
Person p = new Student();
p.PersonSay();
Student s=(Student )p; //把p强转为Student类型后赋给s
s.StudentSay();
是叫里氏转换吧,我想知道它的实际用途,求举例啊。
c#或java里子类对象赋值给父类有什么用,举几个例子啊。
答案:2 悬赏:0 手机版
解决时间 2021-01-24 10:34
- 提问者网友:献世佛
- 2021-01-23 12:33
最佳答案
- 五星知识达人网友:雾月
- 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);
定义一:如果对每一个类型为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.add(student);
全部回答
- 1楼网友:妄饮晩冬酒
- 2021-01-23 14:48
举个例子:
你第一天去学校上课,假如其他同学你都不认识,你知不知道别的同学会些什么?(可能你同桌会弹吉他,你前面的同学很会唱歌),这些在你和他们第一次见面的时候你是不知道。老师也不知道,老师想要某一个学生站起来回答问题,老师知道不管是哪个学生都会双腿站起来,都会说中国话(当然这是在班级里没有残疾人的情况下),知道这两点老师就可以叫某个学生起来回答问题了,对吧。
在这个例子里,会说中国话就代表你的PersonSay()方法,老师就是使用你这个方法的人,那么老师还需不需要知道具体是哪个学生了?不需要了,可以随意点名,因为这个班级里都是人类,都会站起来说中国话
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯