问个面向对象的简单问题

guirenwang 2009-11-17 11:20:24

package Hello;

public class Hello {

public static void main(String arg[])
{
child c = new child();
c.setText("In main function");
c.Display();
}

}

package Hello;

public class Parent {
private String txt;
public Parent(){
txt = "parent";
}

public void setText(String t) {
System.out.println("Parent::setText");
txt = (t == null) ? "" : t;
}

public String getText(){
return txt;
}

private void addHead(){
txt = "Here is father txt " + txt;
System.out.println("@ addhead: " + txt);
}

public void Display(){
addHead();
System.out.println("txt = "+getText());
}
}

package Hello;

public class child extends Parent{
private String txt;
public child() {
txt = "child";
}

public void setText(String t){
System.out.println("child::setText");
txt = (t!=null)?t:"";
}

public String getText(){
return txt;
}

}

输出结果为:
child::setText
@ addhead: Here is father txt parent
txt = In main function

如果我想让父类的addHead()中的内容在子类调用Display()时也可以显示出来,出了在子类中overwrite函数addHead(),请问还有什么其他的方法么?
...全文
184 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
aodi307 2009-11-17
  • 打赏
  • 举报
回复
Java code
public class Parent{
protected void addHead(){
txt = "Here is father txt " + txt;
System.out.println("@ addhead: " + txt);
}

}
public class Child extends Parent{
//重写addHead方法
public void addHead(){
super.addHead();
txt = "Here is Child txt " + txt;
System.out.println("@ addhead: " + txt);
}

}
就是 6楼的这种写法。
lsdb 2009-11-17
  • 打赏
  • 举报
回复
好好理解一下java的多态机制
howardhewang 2009-11-17
  • 打赏
  • 举报
回复
private改为protected,然后用多态,ok.
sangshusen_1988 2009-11-17
  • 打赏
  • 举报
回复
那就在方法中调用super.addHead();
guirenwang 2009-11-17
  • 打赏
  • 举报
回复
我的意思是不需要在子类中实现addHead函数即可通过Display函数直接调用父类中的addHead的功能,就像二楼所描述的那样。。。

非常感谢楼上的回复。。。
bayougeng 2009-11-17
  • 打赏
  • 举报
回复
是啊是啊,private方法怎么override?
closewbq 2009-11-17
  • 打赏
  • 举报
回复

public class Parent{
protected void addHead(){
txt = "Here is father txt " + txt;
System.out.println("@ addhead: " + txt);
}

}
public class Child extends Parent{
//重写addHead方法
public void addHead(){
super.addHead();
txt = "Here is Child txt " + txt;
System.out.println("@ addhead: " + txt);
}

}
bawgiitx 2009-11-17
  • 打赏
  • 举报
回复
private void addHead(){
改成
protected void addHead(){
gentalguo 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 guirenwang 的回复:]
如果我想让父类的addHead()中的内容在子类调用Display()时也可以显示出来,出了在子类中overwrite函数addHead(),请问还有什么其他的方法么?
[/Quote]
看到这了,说几句,若有什么不妥还请你包涵。
第一,你说override?你在Parent里面
private void addHead()
定义为私有的,子类根本不继承,又何来覆盖呢?概念上的,当然也许LZ的说法疏忽了吧。
第二,你的描述我没有看明白。
你是说,输出的内容仍是这样,其他的做法吗?
guirenwang 2009-11-17
  • 打赏
  • 举报
回复
谢谢各位朋友的支持。。。
楼上的这个朋友的方法我想过,但是我的现有代码中的调用很是复杂。。。这样感觉到很痛苦。。。不知道有其他的方法么??
一头头 2009-11-17
  • 打赏
  • 举报
回复
这样?

public class child extends Parent{
private String txt;
public child() {
txt = "child";
}

public void setText(String t){
System.out.println("child::setText");
txt = (t!=null)?t:"";
}

public String getText(){
return txt;
}

public void addHead(){
super.addHead();
}

}
lvsongqing 2009-11-17
  • 打赏
  • 举报
回复
用多态
bayougeng 2009-11-17
  • 打赏
  • 举报
回复
子类改成这样:
public class Child extends Parent{

public Child() {
super.setText("child");
}
}
hhb_snow1 2009-11-17
  • 打赏
  • 举报
回复
你直接覆盖父类的Display函数就可以了

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧