java同名函数_浅谈Java 继承接口同名函数问题
在Java中如果一個類同時繼承接口A與B,并且這兩個接口中具有同名方法,會怎么樣?
動手做實驗:
interface A{
void fun();
}
interface B{
void fun();
}
interface C extends A,B{
}
public class Test implements C{
@Override
public void fun() {
System.out.println("hehe");
}
public static void main(String[] args) {
new Test().fun();
}
}
運行截圖:
上例的情況,可以正常編譯運行,輸出"hehe",因為A與B中的fun具有相同的簽名(參數個數與類型相同)
interface A{
void fun();
}
interface B{
int fun(int x);
}
interface C extends A,B{
}
public class Test implements C{
@Override
public void fun() {
System.out.println("hehe1");
}
@Override
public int fun(int x) {
return 0;
}
public static void main(String[] args) {
new Test().fun();
}
}
上例也是可以編譯運行的,因為A與B中的fun方法具有不同的函數簽名,本質上是兩個方法,分別實現即可。
interface A{
void fun();
}
interface B{
int fun();
}
interface C extends A,B{
}
public class Test implements C{
@Override
public void fun() {
System.out.println("hehe");
}
public static void main(String[] args) {
new Test().fun();
}
}
而這種具有相同函數簽名,但不同返回值的方法,是沒有辦法編譯的,接口C便已經無法編譯。
補充知識:java 類implements多個接口含有相同名字函數
java 類不能多繼承 class A extends B,C{}是不允許的
但能實現多個接口 class A implements B,C{}是可以的,而多個接口中如果出現相同名字函數:
interface in1{
public void fun1();
public void fun2();
}
interface in2{
public void fun1();
public void fun3();
}
只許實現一個即可:
class fun implements in1,in2{
public void fun3() {
// TODO Auto-generated method stub
}
public void fun1() {
// TODO Auto-generated method stub
}
public void fun2() {
// TODO Auto-generated method stub
}
}
以上這篇淺談Java 繼承接口同名函數問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持云海天教程。
原文鏈接:https://blog.csdn.net/yurenfan/article/details/55803164
總結
以上是生活随笔為你收集整理的java同名函数_浅谈Java 继承接口同名函数问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ExtJs学习笔记(21)-使用XTem
- 下一篇: C语言面试题之华为篇2(答案全)