public class Test
{
public static void main(String[] args) 
{
Person person = new Person(); IRead read = new Book();//看了这读物后想买下它
person.read(read);

//person.buy(read);
}
}//读物
interface IRead
{
void content();
}//商品
interface Goods
{
void buy();
}//图书
class Book implements IRead,Goods
{
public void content()
{
System.out.println("沉思录....");
}
public void buy()
{
System.out.println("我买下这本书");
}
}//报纸
class NewPaper implements IRead,Goods
{
public void content()
{
System.out.println("今天的头条是.....");
}
public void buy()
{
System.out.println("我买十份报纸");
}
}class Person
{         //预览读物
public void read(IRead read)
{
read.content();
}
         
         //买下商品(这是要预览读物后才决定买不买的,不能首先就调用buy方法)
public void buy(Goods goods)
{
goods.buy();
}
}
现在的问题就在于在main方法里面,顾客预览了商品后无法决定买不买,要怎么解决这个问题?

解决方案 »

  1.   

    read方法返回一个boolean类型的结果就可以了。
    返回true代表预览满意,将会买。
    返回false代表不满意,将不会买。
      

  2.   

    book类里面加个boolean型的标志,预览后将标志置为true
    buy方法中上来先判断标志位,当标志为true时继续执行buy的逻辑,当为false时,提示后退出方法。
    是这个意思不?
      

  3.   


    我说的不是这个,是原本读物是实现的IRead,现在要买了,因为buy这个方法在Goods里,而不再IRead里。
      

  4.   

    buy方法在book里就可以了,用book的属性来做判断的依据,不可以么?
      

  5.   


    class Book implements IRead,Goods
    {   private boolean read = false;
        public void content()
        {
            System.out.println("沉思录....");    }
        public void buy()
        {   if(read){
                System.out.println("我买下这本书");
            }else{
                System.out.println("您还没有预览该商品!");
            }
        }
    }
      

  6.   


    Book实现了Goods接口,就有buy方法了。为什么我不把buy方法放到IRead里,因为一件读物它不一定是商品,一件商品不一定是读物
      

  7.   

    接口里的方法是需要到具体的类中实现的,book中实现buy方法时,方法体中用到了自己特有的属性,哪里有问题呢?
    不知道你在纠结什么
      

  8.   

    注意把 person.buy(read);的注释去掉
      

  9.   

    如果你直接调用buy方法你会发现根本调用不了
      

  10.   


    public class Test2 {
        public static void main(String[] args) {
            Person person = new Person();        Book read = new Book();        // 看了这读物后想买下它
            person.read(read);        person.buy(read);
        }
    }// 读物
    interface IRead {
        void content();
    }// 商品
    interface Goods {
        void buy();
    }// 图书
    class Book implements IRead, Goods {
        private boolean read = false;    public void content() {
            System.out.println("沉思录....");
        }    public void buy() {
            if (read) {
                System.out.println("我买下这本书");
            } else {
                System.out.println("您还没有预览该商品!");
            }
        }
    }// 报纸
    class NewPaper implements IRead, Goods {
        public void content() {
            System.out.println("今天的头条是.....");
        }    public void buy() {
            System.out.println("我买十份报纸");
        }
    }class Person {    // 预览读物
        public void read(IRead read) {
            read.content();
        }    // 买下商品(这是要预览读物后才决定买不买的,不能首先就调用buy方法)
        public void buy(Goods goods) {
            goods.buy();
        }
    }
      

  11.   

    book就是book,不要用其中的某一接口名声明,这样会把book限定死,你的核心问题在这里
      

  12.   

    上面改代码的时候,忘了在content()里加上read=true;了,但是我想现在这个不重要了
      

  13.   


    我刚想起来,如果直接Book book = new Book()这样的话,那我还声明结构作甚?