文章目录
- 1.定义一个MyClass类和一个 MyInterface接口
- 2.具体使用场景
- 3.如何调用 MyClass 自己的特有方法?
- 4.总结
1.定义一个MyClass类和一个 MyInterface接口
java">public interface MyInterface {void doSomething(); // 权限修饰符默认是public
}public class MyClass implements MyInterface {@Overridepublic void doSomething() { // 权限修饰符要和实现的接口一致System.out.println("Doing something in MyClass");}// MyClass 特有的方法public void myClassSpecificMethod() {System.out.println("This is a MyClass specific method");}
}
2.具体使用场景
java">public class Main {public static void main(String[] args) {MyInterface myInterfaceInstance = new MyClass();// 调用接口方法myInterfaceInstance.doSomething(); // 可以调用,输出 "Doing something in MyClass"// myInterfaceInstance.myClassSpecificMethod(); // 编译错误,不能调用 MyClass 特有的方法}
}
解释
使用接口引用
MyInterface myInterfaceInstance = new MyClass();:
你只能调用接口MyInterface
中定义的方法,即 doSomething(),因为 myInterfaceInstance 的编译时类型是 MyInterface,它并不知道 MyClass 的存在或者它的特有方法
。
你不能调用 myClassSpecificMethod(),因为这个方法不属于 MyInterface,即便它是 MyClass 特有的方法,编译器会阻止这种调用。
3.如何调用 MyClass 自己的特有方法?
可以通过向下转型(type casting)来实现。通过
将接口引用强制转换为 MyClass
,你可以调用 MyClass 中定义的所有方法:\
java">public class Main {public static void main(String[] args) {MyInterface myInterfaceInstance = new MyClass();// 调用接口中的方法myInterfaceInstance.doSomething(); // 输出 "Doing something in MyClass"// 强制类型转换,转换为 MyClass 类型MyClass myClassInstance = (MyClass) myInterfaceInstance;// 现在可以调用 MyClass 特有的方法myClassInstance.myClassSpecificMethod(); // 输出 "This is a MyClass specific method"}
}
4.总结
- 使用接口引用时,只能调用接口中定义的方法,而不能调用实现类的特有方法。
- 如果你需要调用实现类的特有方法,可以将接口引用强制转换为具体的实现类类型,再调用该类的方法
- 注意:进行类型转换时,确保这个引用确实是实现类的实例,否则可能会抛出 ClassCastException。