本帖最后由 zsmg888 于 2009-10-08 17:01:53 编辑

解决方案 »

  1.   

    首先不懂lz的真正意图
    “我还要再写个类来把接口和实现类揉在一起.那不是比抽象类麻烦吗?”
    这是啥意思?你没有真正理解多态的好处,好好看书体会。为什么还要提出接口这个概念呢?
    答:java只支持单继承,那谁来表现一个类多继承的特征?
           接口。一个类可以实现多个接口。
      

  2.   

    我还要再写个类来把接口和实现类揉在一起.那不是比抽象类麻烦吗?
    不理解楼主啥意思
    那为什么还要提出接口这个概念呢?
    接口是规范,用来实现java中的多继承
      

  3.   

    lz的问题是什么。是“为什么还要提出接口这个概念呢?”这句吗?为什么要有接口这个东西,在我初学java的时候也有这个疑问。你现在觉得定义的时候接口没有抽象类方便,确实如此,但接口的好处是要你在使用它的时候才能发现的。比如这个类public Thread(Runnable target),实例化的时候需要一个实现了Runnable接口的对象作参数,只要它自己实现了Runnable接口,就能放在这里当参数,与它的父类祖父类能不能在这里当参数毫无关系。属于其他继承树的类只要实现这个接口也能放在这里当参数。这样处理就灵活了好多。其实你不必急着弄懂这个问题,多写写代码,很自然就能弄懂的。
      

  4.   

    各位,我的意思是说,如果我定义的是抽象类,那我直接就可以
    抽象类  变量 = new 子类构造方法
    来实现多态.而接口的话,我要体现多态,我不能直接在接口里写 
    public static void main(String []args){
    这里来写接口的多态.因为接口里不容许包含方法体.
    }
    我只能在重新开个类,来
    public static void main(String []args){
    接口 变量 = 实现类
    来体现多态.
    }
    比直接在抽象类上public static void main(String []args){ 麻烦.
      

  5.   

    http://www.javaresearch.org/forum/thread.jsp?column=16&thread=28218
    不知上文是否有帮助,^^
      

  6.   

    lz的意思还是有点表述不清。就为了个main函数否定接口?用接口觉得麻烦就别用接口,该用的地方才用。接口和抽象类本来是各有分工的,接口有接口的好处,何必要求接口处处都比抽象类好。
      

  7.   

    单继承,多接口;
    class C extends A,B  --->错
    class C implements A,B ---->可以
      

  8.   

    楼上的,单继承我可以变相的变成多继承啊.
    如: class C extends A,B是错的.
        那我  class B extends A.
             class C extends B.
           那C类就可以继承A B两类的东西了呀?那和接口不一样了么?
      

  9.   

    接口为什么必要,原因不止一个。
    就拿个最显而易见的来看:
    你如果想要多继承,怎么办?
    intends后面只能跟一个类,implement后面可以有N个接口。
      

  10.   

    关于接口的作用第一点,请看下面这个雇员的例子,其中定义了修改个人信息和计算薪水的方法 public abstract class Employee implements Payable, EmployeeInfo
    {
        private String name;
        private double weeklyPay;
        //构造器
        public Employee(String name, String address)
        {
            this.name = name;
            this.address = address;
        }    //跟个人信息由关的方法
        public String getName()
        {
            return name;
        }
        public void setName(String n)
        {
            name = n;
        }    //跟薪水有关的方法
        public double getWeeklyPay()
        {
            return weeklyPay;
        }
        public void computePay(int hoursWorked)
        {
            weeklyPay = hoursWorked * 6.50;
            System.out.println("Weekly pay for " + name + " is $" + weeklyPay);
        }
    }//Payable接口只提供跟薪水有关的方法 
    interface Payable
    {
        public void computePay(int hoursWorked);
        public double getWeeklyPay();
    }//EmployeeInfo接口只提供跟个人信息有关的方法 
    interface EmployeeInfo
    {
        public String getName();
        public void setName(String n);
    }//如果写一个会计的类,其中的方法把Payable作为参数,会计就只能使用跟薪水有关的方法,而不能修改Employee的个人信息
    class Payroll
    {
        public void payEmployee(Payable p)
        {
            p.computePay(40);
        }    public void printPaycheck(Payable p)
        {
            System.out.println("Printing check for $" + p.getWeeklyPay());
        }
    }//如果再写一个HR的类,其中的方法的参数为EmployeeInfo,那么HR就只能使用跟员工个人信息有关的方法,而不能看到薪水等 
    class HumanResources
    {
        public String getInfo(EmployeeInfo e)
        {
            return e.getName() + " " + e.getAddress();
        }    public void changeName(EmployeeInfo e, String name)
        {
            System.out.println("Changing name for " + e.getName());
            e.setName(name);
            System.out.println("New name is " + e.getName());
        }
    }
    //这样一来,通过接口,Employee类就可以提供部分方法给该类的用户使用,而不会暴露其他的方法,这个是接口的作用之一
      

  11.   

    lz有个问题没搞明白,很难发现你的意图是什么.. /*
            从这里看来,可以直接在抽象类上进行操作.很简单,很好.容易理解.
            */
    在这里,你的main方法是在父类中写的,而不是在其他地方/*
            从这里看来,在接口上还不容许使用main方法,那么我要实现接口的多态的话,
            我还要再写个类来把接口和实现类揉在一起.那不是比抽象类麻烦吗?
            既然不如抽象类操作起来方便,直观.那为什么还要提出接口这个概念呢?
            */
    在接口中不能,定义main方法,而lz想当然的就认为,父类指向子类对象,应该在父类中操作
    而接口中显然不能这么实现..lz有个误区.多态的使用.父类指向子类对象.你也发现了这样的好处..
    但不一定非要在父类中去实现这个调用.这个main方法只是个测试用的,即使在你的第一个例子中
    如果你没有main方法,你就体验不到的多态的好处了么..
      

  12.   

    对于什么时候用继承(当然抽象类也一样),什么时候用接口,你可以有这么一个标准
    我们说"狗"是"动物",那么"狗"可以继承动物
    这当中有个关键字"XX是xx",满足 is a 的关系.
    飞机能飞.可以把"飞",定义为接口,鸟能飞,当然也能实现这个接口
    这当中得"XX能Xx",满足 can do 的关系
    希望能对lz有帮助
      

  13.   

    大概知道了楼主的意图
    一抽象类是有至少有一个抽象方法的类接口也叫完全抽象类。所有方法都抽象只所以你那个抽象类里面可以用main方法是因为你那个类已经有一个抽象方法了.你先搞清楚抽象类和接口的概念吧
      

  14.   

    如何你想测试。可以试着把你那个抽象类的方法body实体部分补上。你那个抽象类就不能写main了
    因为没一个抽象方法的类不叫抽象类
      

  15.   

    还有接口是要用来实现的。你现在可能会认为他麻烦。慢慢的你会很好用
    学多了以后
    包括现在的主流框架 struts hibernate spring都是建立在接口之下的
    慢慢来吧
      

  16.   

    了解了多态就明白了,多态有三个必要条件,1,要有继承,2,方法重写,3,超类引用指向了类对像···如果想了解的更多, http://bbs.tsp2c.cn/?fromuid=136