首页 > 试题广场 >

下面选项中,哪些是interface中合法方法定义?()

[不定项选择题]
下面选项中,哪些是interface中合法方法定义?()
  • public void main(String [] args);
  • private int getSum();
  • boolean setFlag(Boolean [] test);
  • public float get(int x);
java程序的入口必须是static类型的,接口中不允许有static类型的方法。A项没有static修饰符,可以作为普通的方法。而且接口中的方法必须是public的。想想借口就是为了让别人实现的,相当于标准,标准不允许别人使用是不合理的,所以接口中的方法必须是public。C项中,接口中的方法默认是public的。D项属于正常的方法。所以答案是:ACD
发表于 2016-03-08 14:24:40 回复(13)
更多回答
interface中的方法默认为public abstract 的 ,变量默认为public static final 

发表于 2016-06-17 18:29:14 回复(11)

我还是必须啰嗦几句。

JDK8及以后,允许我们在接口中定义static方法和default方法。

在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的。由于这些修饰符都是默认的,所以在JDK8之前,下面的写法都是等价的.

public interface JDK8BeforeInterface {  
    public static final int field1 = 0;  

    int field2 = 0;  

    public abstract void method1(int a) throws Exception;  

    void method2(int a) throws Exception;  
}

JDK8及以后,允许我们在接口中定义static方法和default方法。

public interface JDK8Interface {  

    // static修饰符定义静态方法  
    static void staticMethod() {  
        System.out.println("接口中的静态方法");  
    }  

    // default修饰符定义默认方法  
    default void defaultMethod() {  
        System.out.println("接口中的默认方法");  
    }  
}

再定义一个接口的实现类:

public class JDK8InterfaceImpl implements JDK8Interface {  
    //实现接口后,因为默认方法不是抽象方法,所以可以不重写,但是如果开发需要,也可以重写  
}

静态方法,只能通过接口名调用,不可以通过实现类的类名或者实现类的对象调用。default方法,只能通过接口实现类的对象来调用。

public class Main {  
    public static void main(String[] args) {  
        // static方法必须通过接口类调用  
        JDK8Interface.staticMethod();  

        //default方法必须通过实现类的对象调用  
        new JDK8InterfaceImpl().defaultMethod();  
    }  
}

当然如果接口中的默认方法不能满足某个实现类需要,那么实现类可以覆盖默认方法。

public class AnotherJDK8InterfaceImpl implements JDK8Interface {  

    // 签名跟接口default方法一致,但是不能再加default修饰符  
    @Override  
    public void defaultMethod() {  
        System.out.println("接口实现类覆盖了接口中的default");  
    }  
}

由于java支持一个实现类可以实现多个接口,如果多个接口中存在同样的static和default方***怎么样呢?如果有两个接口中的静态方法一模一样,并且一个实现类同时实现了这两个接口,此时并不会产生错误,因为jdk8只能通过接口类调用接口中的静态方法,所以对编译器来说是可以区分的。但是如果两个接口中定义了一模一样的默认方法,并且一个实现类同时实现了这两个接口,那么必须在实现类中重写默认方法,否则编译失败。

public interface JDK8Interface1 {  

    // static修饰符定义静态方法  
    static void staticMethod() {  
        System.out.println("JDK8Interface1接口中的静态方法");  
    }  

    // default修饰符定义默认方法  
    default void defaultMethod() {  
        System.out.println("JDK8Interface1接口中的默认方法");  
    }  

}
public class JDK8InterfaceImpl implements JDK8Interface,JDK8Interface1 {  

    // 由于JDK8Interface和JDK8Interface1中default方法一样,所以这里必须覆盖  
    @Override  
    public void defaultMethod() {  
        System.out.println("接口实现类覆盖了接口中的default");  
    }  
}
public class Main {  
    public static void main(String[] args) {  
        JDK8Interface.staticMethod();  
        JDK8Interface1.staticMethod();  
        new JDK8InterfaceImpl().defaultMethod();  
    }  
}
发表于 2017-10-29 10:46:38 回复(25)
正确答案A C D A:只是方法名称和参数名称取的比较特殊,java中正确的main方法定义是 public static void main(String[] args){ } B: 接口中不能定义私有方法 C 不显示标明方法的访问修饰符,接口中默认是public D get可以作为方法名称,应该无异议
发表于 2016-02-16 20:35:14 回复(12)
接口方法只能是public abstract,变量只能是public static final,即使没写全也是默认带这些修饰符的。但是jdk1.8后允许接口有default实现,允许出现static方法。
发表于 2016-08-27 10:21:27 回复(1)
JDK 1.9时,接口中的方法可以是private的
发表于 2019-02-20 13:52:01 回复(4)
接口是抽象的延伸,是抽象类的特殊形式。java中使用接口,一个类可以实现多个接口。接口中包含的成员有全局常量和抽象方法,接口中的成员都有固定的修饰,成员变量:public static final 成员方法:public abstract,这些固定的修饰可以省略不写。接口中的常量和方法必须是public的访问权限。接口中的方法都是抽象方法,则接口不可以实例化,但接口可以声明对象叫作接口变量。接口的子类必须实现了接口中的所有抽象方法后,该子类才可以被实例化,否则子类还是一个抽象类。接口中可以有多继承,接口与接口之间存在着继承关系,接口可以多继承接口。
发表于 2016-09-04 23:58:15 回复(0)
有没有和我一样的CD,第一眼果断把A选项Pass了😂😂😂😂😂
😂😂

发表于 2020-03-13 16:00:08 回复(2)
不够严谨吧。应该在题干上注明JDK版本

关于抽象类:
  • JDK1.8以前:抽象类的方法默认访问权限为protected
  • JDK1.8时:抽象类的方法默认访问权限变为default
关于接口:
  • JDK1.8以前:接口中的方法必须是public的
  • JDK1.8时:接口中的方法可以是public的,也可以是default的
  • JDK1.9时:接口中的方法还可以是private的

发表于 2019-07-25 15:56:38 回复(1)
这题考的是 interface(接口)的修饰符可以是什么?
1.可以是public(男女老少都用它) 和 protect(继承圈内都可以用它) 其他的都不行
2.接口的方法都是抽象的,抽象方法不能static的,另外接口的变量又是都是static和final的
但是有个疑问:这个D他同float作为返回值类型 又用int来做形参不会很费事嘛  这样虽然不报错但是不会需要强制转型吗

编辑于 2017-01-11 23:08:08 回复(1)
<p>应该选ABCD,java9之后可以定义私有方法了。</p><p><br></p>
发表于 2020-05-20 22:21:32 回复(0)
发表于 2016-09-18 21:04:56 回复(0)
这应该是java的题目
发表于 2016-02-13 09:36:21 回复(0)
接口不能有main方法,必须是public的
发表于 2015-11-21 22:59:54 回复(3)

JDK8及以后,允许我们在接口中定义static方法和default方法。

编辑于 2022-04-18 10:52:28 回复(0)
在jdk1.8之前,接口就是让别人继承的,接口中的方法必须是public 的,默认是public abstract的,即使没写全也默认带这些修饰符的。
在jdk1.8中,接口中的修饰符可以为default、static,但是必须有方法体;
在jdk1.9中,接口中的修饰符可以为private,但是必须有方法体;
接口中的变量默认是public static final的
发表于 2020-02-17 15:22:01 回复(0)

1.java中正确的main方法定义是 public static void main(String[] args){ } ,A是普通方法,A对;
2. 接口中不能定义私有方法,必须是public的,B错;
3.不显示标明方法的访问修饰符,接口中默认是public,C对;
4.get可以作为方法名称,应该无异议,D对;
记:接口中不能定义私有方法,必须是public的
发表于 2017-09-08 09:59:28 回复(1)
1、接口中的方法必须是public,并且默认情况下方法也是public的,B中是private,错
2、接口中的方法是为其他类提供实现的标准,只能有方法头,没有方法体
发表于 2016-03-28 08:29:08 回复(0)
jdk8之前,方法只能是public abstract; jdk8时,方法可以是public abstract, public default, public static; jdk9,增加private方法,必须有方法体。
发表于 2023-09-14 22:51:19 回复(0)
  • java8开始,接口中可以有静态方法,使用public static修饰的方法。需要有方法体;
  • java8开始,接口中可以有默认方法,使用public default修饰,需要有方法体。
  • java9开始,接口中可以有私有方法,private修饰,需要有方法体,只能在接口中使用。可以用来封装一些公共操作,减少代码冗余。
发表于 2022-05-13 21:58:34 回复(0)