java类的继承练习(一个小程序)

一、程序功能:通过LX3_7_P类产生子类LX3_8,其不仅具有父类的成员变量xm(姓名)、xh(学号),还定义了新成员变量xy(学院)、xi(系)。在程序中调用了父类的... 一、程序功能:通过LX3_7_P 类产生子类LX3_8, 其不仅具有父类的成员变量xm (姓名)、xh( 学号),还定义了新成员变量xy(学院)、xi(系)。在程序中调用了父类的print 方法,同时可以看出子类也具有该方法。
下面是我想的代码:
public class LX3_7{
public static void main(String args[]){
LX3_7_p ss=new LX3_7_p("dd",34);
System.out.println(ss.print());
LX3_7_p sn=new LX3_8("aa",34,"bb","cc");
System.out.println(sn.print());
System.out.println(sn.prin());
}
}
class LX3_7_p{
String xm;
int xh;
LX3_7_p(){}
LX3_7_p(String xm,int xh)
{
this.xm=xm;
this.xh=xh;
}

String print(){
return "姓名:"+xm+"学号:"+xh;
}
}

class LX3_8 extends LX3_7_p{
String xy;
String xi;
LX3_8(String xm,int xh,String xdy,String xdi){
this.xm=xm;
this.xh=xh;
xy=xdy;
xi=xdi;
}
String prin(){
return "姓名:"+xm+"学号:"+xh+"学院:"+xy+"系:"+xi;
}
}
出错说明:
菜鸟我认为在父类LX3_7_p中既然定义了print();方法,那么LX3_8继承LX3_7_p,在子类LX3_8中的print();方法只能显示“姓名”“学号”两个变量,无法显示出“学院”“系”另外两个变量,故在子类LX3_8又定义了prin();方法,可是程序编译不能通过。
实际上我把子类LX3_8中的print();方法修改为:String print(){
return "姓名:"+xm+"学号:"+xh+"学院:"+xy+"系:"+xi;
}
再把System.out.println(sn.prin());注释,程序是对的。
可是大虾我就是想问各位高人在不修改子类print();方法的前提下,另外定义了一个prin();为什么不行,是不是引用出错了?
谢谢。
prin();前加public不顶用啊
展开
 我来答
东桖柳83
2008-10-19 · TA获得超过599个赞
知道小有建树答主
回答量:603
采纳率:0%
帮助的人:378万
展开全部
这就是多态的问题啦,子类继承父类,那么将子类对象的引用赋给父类对象,
你这里就是LX3_7_p sn=new LX3_8("aa",34,"bb","cc")将子类的引用赋给了父类,那么这个引用现在能调用到子类重写过的父类的方法以及父类的方法(这里我不知道该怎么说了,就是这样父类中有print()方法,子类中也就print()方法,并且返回类弄和参数都一样的话,就是重写了父类的方法,那么这时候用sn可以调用到print()方法,但这个方法不是父类的而是子类的),
而不能调用到子类中没有重写父类的方法(这里父类方法为PIRNT(),子类方法为PRIN()),所以sn根本调用不到子类的方法prin()不报错才怪
然后你将子类中的prin()改成print()这就相当于重写了父类的方法,在用sn调用时父类的方法被告覆盖,会调用到子类的print()方法.
不是引用出错啦,只是现在这个sn调用不到子类的prin()方法,你如果用LX3_8产生一个对象调用prin()是不会出现这种问题的啦.
百度网友598742b
2008-10-19 · TA获得超过1627个赞
知道小有建树答主
回答量:2655
采纳率:100%
帮助的人:1259万
展开全部
把你的问题自己写了下,你看下是不是你需要的。
养成的习惯,我对类中的每个字段都封装了,你可以跳过不看。

以下是LX3_7_P类:

package com.baidu.zhidao;

public class LX3_7_P {
public LX3_7_P() {
}

public LX3_7_P(String xm, int xh) {
this.xm = xm;
this.xh = xh;
}

String xm; // 姓名
int xh; // 学号

protected String getXm() {
return xm;
}

protected void setXm(String xm) {
this.xm = xm;
}

protected int getXh() {
return xh;
}

protected void setXh(int xh) {
this.xh = xh;
}

// 基类方法
protected String print() {
return "姓名:" + xm + "\n学号:" + xh;

}

}

以下是LX3_8子类继承自LX3_7_P类

package com.baidu.zhidao;

public class LX3_8 extends LX3_7_P {

public LX3_8() {
}

public LX3_8(String xm, int xh, String xy, String xi) {
super(xm, xh);
this.xy = xy;
this.xi = xi;
}

String xy; // 学院
String xi; // 系

public String getXy() {
return xy;
}

public void setXy(String xy) {
this.xy = xy;
}

public String getXi() {
return xi;
}

public void setXi(String xi) {
this.xi = xi;
}

@Override
// 重写基类方法
protected String print() {
return super.print() + "\n学院:" + xy + "\n系:" + xi;
}

}

测试类:
package com.baidu.zhidao;

public class Text {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
LX3_8 lx = new LX3_8("七目豕",108,"北大青鸟","计算机系");
System.out.println(lx.print());
}

}

************************显示结果*****************************
姓名:七目豕
学号:108
学院:北大青鸟
系:计算机系
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
达内
2021-04-15 · 百度认证:教育领域创作者
达内
向TA提问
展开全部

本视频主要从Java语言基础、JavaSE核心、WEB全栈及数据库、Servlet/Jsp核心、 Java框架五个阶段进行讲解。在本教程中,会让大家从零基础快速掌握Java知识。想要配套学习资料的小伙伴可以联系我哦!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8d200626b
2008-10-19
知道答主
回答量:4
采纳率:0%
帮助的人:6634
展开全部
方法prin前加上public
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式