JAVA接口问题,为什么void改成Int

为什么从void改成int,编译就对了图片说明图片说明

因为int c()和void c()不构成重载,也不构成继承关系。
void c()和基类的int c()视作不同的函数,但是参数列表相同,导致函数重复定义错误。
修改为int c(),虽然基类也有int c(),但是它们构成继承关系,不算重复定义,而它又和另外两个c的重载版本构成重载关系,不重复定义。所以能编译。

作为进一步学习,你可以参考这个:

https://www.zhihu.com/question/29443810

因为方法重载不能通过返回值来区别,你在IA和IB接口中的第一个方法他们的入参和方法名都一样,只是返回值不同,在IC继承了IA和IB之后,无法通过返回值来区别你调用的究竟是IA中的c()方法还是IB中的c()方法,所以编译不允许通过,然后就报错了。而你修改后两个独立的接口对于IC来说只是有了来自两个独立接口的相同的方法。编译的时候并不会报错。因为你可以在运行的过程中来指定调用的究竟是IA接口的方法,还是IB接口中的方法。
所以你的代码编译会通过。不报错。

如何安装SS,还有就是如何给Linux系统服务器新建json文件?我是用putty链接的服务器,在弄ss的时候遇到了问题,在CSDN找教程,如图的地方不知道怎么做,希望大神指点

你这是抽象的,而且是3个不存在继承关系的,类型要一样

定义抽象,只要是继承关系,类型一定要一样的

方法重载不能通过返回值来区别

方法重载不能通过返回值来区别,不是方法特征

方法名一样的,必须以重载的方式写才可以编译通过,除非你改方法名,要么改返回类型一致。
构成重载的要义,必须是返回类型一样,参数类型不一样。

java层面上的特征签名不包括返回值,所以这个在编译的时候就会报错。但是从jvm层面来说,这种事合法的,因为jvm中的特征签名包括返回值。

Java语言的重载,概念规定:几种类型的重载同名方法的返回值类型必须相同。

和楼上的差不多,方法重载是不可以通过返回值来区分的

方法的重载智能根据参数的不同来确定,返回值要一样

你应该看下JAVA接口相关的书籍,然后你就知道为什么void改成Int不行了

接口C继承了,A和B。C就继承了A和B的方法,只是在C中并没有重写无参的C(),等价于C中存在有A和B中的C()方法,再加上C(double x)。而 void C()以及intC() 都与int(double x)构成了重载,重载就是在同一个类中出现方法名相同,但是参数体不同的方法,并没有根据返回值类型的规定,并且重载是编译时期绑定。所以当你调用C()方法时,程序不知道你调用的是void C(),还是int C(),所以编译的时候就会报错。