黑马程序员技术交流社区

标题: 写个简单的装饰设计模式,发现个问题,求问题原因 [打印本页]

作者: 唐辉辉    时间: 2012-6-3 15:54
标题: 写个简单的装饰设计模式,发现个问题,求问题原因
class Person{

public void show(){
  
  System.out.println("Person show");
}
}
class SuperPerson{

private Person p;

SuperPerson(Person p){
  
  this.p = p;
}

public void method1(){
  p.show();
  System.out.println("method----1");
}

public void method2(){
  
  System.out.println(p.show()+"method----2");     
}
}
class PersonDemo{

public static void main(String[] args){
  
  Person p = new Person();
  
  SuperPerson sp = new SuperPerson(p);
  
  sp.method1();
  sp.method2();
  sp.method3();
  
}
}


红色标识的地方:为什么p.show()放在打印语句里就会报错。

--------------------配置: <默认>--------------------
D:\学习\20120603\PersonDemo.java:27: 此处不允许使用 "void" 类型
                System.out.println(p.show()+"method----2");
                                         ^
1 错误

处理已完成。


作者: 胡团乐    时间: 2012-6-3 16:03
System.out.println(p.show()+"method----2");     
里边的p.show() 并没有返回String或别的类型
public void show(){
  System.out.println("Person show");
}
这是一个方法 System.out.println()不能打印没返回类型的方法
如果返回一个String 或者别的类型并且此类型复写了toString方法 就可以用 System.out.println()打印出具体的值
作者: 袁培育    时间: 2012-6-3 16:07
因为p.show没有返回值,所以打印语句不知道打印什么内容,所以就报错了。
作者: 唐辉辉    时间: 2012-6-3 16:10
胡团乐 发表于 2012-6-3 16:03
System.out.println(p.show()+"method----2");     
里边的p.show() 并没有返回String或别的类型
public vo ...

:D , 3Q——, 脑袋搞 糊涂了。看了半天没看出来!!
作者: 何拴绪    时间: 2012-6-3 16:14
本帖最后由 何拴绪 于 2012-6-3 16:20 编辑

因为输出语句中调用了Person类中的show函数,他的返回值为空,所以没法打印。可以简单的这样该一下
  1. class Person{

  2.         public String show(){
  3.    
  4.          return "Person show";
  5.         }
  6. }

  7. class SuperPerson{

  8.         private Person p;

  9.         SuperPerson(Person p){
  10.    
  11.                 this.p = p;
  12.         }

  13.         public void method1(){
  14.                 p.show();
  15.                 System.out.println("method----1");
  16.         }

  17.         public void method2(){
  18.    
  19.                 System.out.println(p.show()+" method----2");     
  20.         }
  21. }

  22. class PersonDemo{

  23. public static void main(String[] args){
  24.    
  25.    Person p = new Person();
  26.    
  27.    SuperPerson sp = new SuperPerson(p);
  28.    
  29.    sp.method1();
  30.    sp.method2();
  31.    //sp.method3();
  32.    
  33. }
  34. }
复制代码

作者: 李春阳    时间: 2012-6-3 16:15
这就牵涉到方法的返回值问题啦。

错误原因:
你的show方法有void修饰符,也就是“空”、无返回值的一个方法。

而System.out.println()。这个必须要在括号内输入有返回值的~
因而当你调用p.show()方法时就不能够正确打印,因而报错。
而且也提示你的错误原因啦:
D:\学习\20120603\PersonDemo.java:27: 此处不允许使用 "void" 类型
                System.out.println(p.show()+"method----2");
                                         ^
解决办法:
修改下你的show()方法。改为
public String show() {
    return "Person show";
}

作者: 张洁    时间: 2012-6-3 16:23
同学要多加强自己解决办法的能力哟~
你的程序报错里面说了,System.out.println(p.show()+"method----2")  这里不能够使用“void”类型
也就是说System.out.println()括弧内必须调用非空“void”类型,需要使用有“返回值”的类型

这里你想输出的是“Person show”字符串。

所以要把方法改成:public String show() {
      return "Person show";
}

然后再System.out.println(p.show());打印应该就可以啦~

作者: 袁錦泰    时间: 2012-6-3 16:37
如果问题得到解决请标记为已解决,避免让后面的同学做出重复回答而得不到分....




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2