接口可以被实例化吗?
接口可以继承接口吗?
接口可以实现多个接口吗?
抽象类和接口有什么区别?代码一
abstract class Name{
   private String name;
   public abstract boolean isStupidName(String name){}
}
//是不是把boolean改成void就可以了??
代码二
public class Something{
  void doSomething(){
  private String s="";
  int l=s.length();
}
}
//private 报错,为什么不能被修饰?

解决方案 »

  1.   

    不可以
    可以
    可以
    山寨定义:当一个接口中有一部分方法由自己实现了,就不能叫接口,叫抽象类.abstract   class   Name{
        private   String   name;
        public   abstract   boolean   isStupidName(String   name);
    } public/private/protected只能用于修饰类级属性,不能用于方法内本地属性
    public class Something {
    void doSomething() {
    String s = " ";
    int l = s.length();
    }
    }
      

  2.   

    区别:接口类中的方法皆抽象,抽象类中可以有非抽象方法
    接口中所有成员皆为public,所有属性都是静态的,所有成员属性皆为常量,不能被实例化,没有构造,主要解决java中没有多继承,只能接口继承接口。
    当一个类中有抽象方法,该类必须为抽象类,抽象类不能被实例化,抽象类中的抽象方法必须由子类实现,如果子类不实现,有可能编译出错,除非子类也是抽象类。其余参考一楼。
      

  3.   

    首先你要明白一个类如下
    class A
    {
       public int getMaxA(int a,int b);   
    }        
    每个类有一个函数表 也就是函数地址的数组....如果编入了一个模块那么函数的地址就是固定的.
    如果这个模块发生了改变,函数的地址就会改变 那么使用这个模块的工程都需要重新编译.
    class B extends A
    {
       public int getMaxB(int a,int b);
    }
    这2个类的函数表看起来如下
    A            B
    [getMaxA]   [getMaxA]
                [getMaxB] 
    如果将getMaxA 声明为纯虚函数,则不能构建A的实例.而且B必须实现getMaxA 否则也不能构建实例.
    此时函数表如下
    A                B
    [NULL](空地址)    [getMaxA]
                     [getMaxB]
    我们只需要将 A类供给别人使用就行了.他无法知道getMaxA如何实现的.
    我们可能会提供这么一个函数
    A GetA()
    {
       A tempA = new B()
       return A;
    }那么调用A.getMaxA 时 实际调用的是B.getMaxA. 这就是所谓的接口.一个重要的地方是
    以后即使你改变了B类,那么只重新编译B类所在模块即可,其他模块无需重新编译.
    简单的说这就是动态绑定函数地址,而不是在编译时就把函数地址写时.
      

  4.   

    ActionListener 就是1个接口.
    程序始终只调用ActionListener.actionPerformed 去执行事件
    ActionListener.actionPerformed 因为是个纯虚函数 所以会去执行派生的MyActionListener.actionPerformed函数.不过做java 没必要弄得这么详细了button.addActionListener(new ActionListener() //这里等同于创建了1个匿名派生类
    {
    public void actionPerformed(ActionEvent event)
    {
    demoPanel.setBorder(b);
    }
    });