突然发现自己对java中接口的使用不清晰,专门搞了几个小测试,看看在一些特殊情况下的结果。
1. 两个接口常量冲突:
public interface IA {
public static final String s = "goodIA";
}
public interface IB {
public static final String s = "goodIB";
}
class AB implements IA, IB {
public static void main(String[] args) {
IA ia = new AB();
IB ib = new AB();
AB ab = new AB();
System.out.println(ia.s);
System.out.println(ib.s);
System.out.println(ab.s);
}
}
结果eclipse提示
System.out.println(ab.s);
这一行"The field ab.s is ambiguous"
ia.s,ib.s都是正常打印出各自接口对应的常量。
2.两个接口方法名冲突:
如果两个接口都有各自要用的getName()方法,实现类又凑巧同时继承这两个接口,例如系统中有个leader接口,有个engineer接口,两个接口都定义了getKPI(),某个角色类同时又是leader又是engineer,KPI排名是按leader排一个,按engineer排一个,那个角色的getKPI()就需要同时实现leader和engineer的getKPI()了。(例子不大好,反正应该有这样的案例吧)
暂时无解,再慢慢想办法。。。。只能平时定义接口的时候小心了。。。。
3.在接口中定义常量
常量改变了以后,如果不重新编译使用该常量的类,打印出来的还是原来的那个常量,在论坛上看到"常量在编译时编译器会进行inline优化",inline优化大概是指把那段认定了不会变的东西复制一份进来。导致常量变了后,引用他的类里面的那个备份还在,不会自动更新上去。这个不只是接口,所有东西里的常量都是这样。
public interface IA {
public static final String s = "goodIaaa";
}
class AB implements IA, IB {
public static void main(String[] args) {
IA ia = new AB();
System.out.println(ia.s);
}
}
打印了"goodIaaa",然后改变IA中s的值
public interface IA {
public static final String s = "goodIA";
}
结果运行AB,打印的还是"goodIaaa",要重新编译AB,才会变成"goodIA"。
分享到:
相关推荐
在这个"java接口练习作业"中,我们将会探讨接口的使用,以及如何将其应用于集合框架中。 首先,让我们深入了解Java接口的基本概念。接口是完全抽象的类,不能包含实例变量,但可以声明常量。它由一系列无实现的方法...
在"实验3"中,你将有机会编写实际的Java代码,创建继承链,实现接口,并探索这些概念如何在实际问题中应用。通过实践,你会更好地理解Java继承和接口的工作原理,以及它们如何增强你的代码设计能力。记得在编程时...
《Creo 二次开发JAVA接口使用向导》是一份详细指导文档,专为那些希望深入探索Creo软件功能并利用JAVA接口进行定制化开发的工程师准备。Creo是由美国PTC公司开发的一款强大的三维参数化建模软件,广泛应用于机械设计...
内容概要:本文详细讲解了Java编程中的接口概念,包括接口的基本特性及其在继承和多态性中的重要角色。首先介绍了接口作为一种抽象方法集合的特性,强调了它作为不同类间共通行为规范的角色。随后文章探讨了如何通过...
在Java编程语言中,类和接口是核心概念,它们构成了程序设计的基础。API(Application Programming Interface)则是一系列预先定义...在Java世界里,不断学习和探索API的深度和广度,是成为一名优秀程序员的必经之路。
在实验3中,你可能需要编写实现接口的类,使用Lambda表达式,以及探索接口在不同场景下的应用,比如事件监听、多线程(Runnable接口)或集合框架(Comparator接口)等。通过实际操作,你可以更好地理解接口的概念,...
"JAVA虚拟机在JAVA课程教学中的探索" 本文探索了JAVA虚拟机在JAVA课程教学中的应用,讨论了JAVA技术的体 系结构、JAVA虚拟机的重要角色和地位, serta如何结合JAVA虚拟机来解释JAVA的基本概念和运行机制。 JAVA...
"面向企业应用的Java教学框架探索"这一主题旨在深入讲解如何利用Java技术栈构建高效、可维护的企业级应用程序。在这个主题中,我们将关注以下几个核心知识点: 1. **Java基础**:Java作为一门面向对象的语言,其...
3. **免费天气API接口**:探索不同的免费天气API,如OpenWeatherMap、Weatherbit等,学习如何注册并获取API密钥,以及如何调用这些API获取天气数据。 4. **Lombok**:掌握Lombok注解的使用,如`@Data`、`@...
《jwnl14接口库:Java与WordNet的桥梁》 在信息技术领域,语言处理是一项至关重要的任务,特别是在自然语言理解和人工智能中。WordNet,一个由美国普林斯顿大学开发的英语词汇数据库,是这个领域的瑰宝。它提供了一...
在Java开发中,调用Web服务接口是一种常见的任务,尤其在分布式系统和企业级应用集成中。Web服务接口,特别是基于SOAP(Simple Object Access Protocol)的Web Service,提供了一种标准化的方式来交换数据,使得不同...
Java API,全称为Java应用程序接口,是Oracle公司提供的一个庞大的类库集合,包含了大量预定义的类和方法,为开发者提供了丰富的功能,使得Java程序员能够更高效地开发各种应用程序。这个"JAVA的免费API直接使用!...
JDBC提供了一套标准接口,使得Java程序可以独立于具体的数据库管理系统执行SQL语句。首先,我们需要加载数据库驱动,然后创建数据库连接,接着准备并执行SQL语句,最后处理结果集。 2. **SQL基础**:SQL...
### Java集合框架的主要接口和类全解析 #### Java集合框架概览 Java集合框架是Java标准库的一个核心组成部分,它为开发人员提供了多种用于存储和操作数据的方式。这些集合类和接口的设计旨在满足不同的需求,并...
Java接口实验报告 本实验报告旨在探索Java语言中的接口机制,并通过实验任务来掌握接口的定义、实现和使用。实验报告将涵盖接口的概念、接口的定义、接口的实现、接口的使用、面向接口的编程思想等多个方面。 一、...
### 深入剖析Java抽象类与接口的神秘力量 - 探索编程世界的双极法则 #### 第一章:抽象类的创世神话 —— 基础与实战 ##### 概念解析: 抽象类在Java编程语言中扮演着极其重要的角色。它可以被视为一种特殊类型的...
深入探索Java对象的序列化 对象序列化就是把对象写入到输出流中,用来存储或者传输。 对象的反序列化就是从输入流中读取对象。 要序列化的对象应该实现Serializable接口。 Serializable接口是一个标识接口,...
在Java编程语言中,类和接口是面向对象编程的基础元素,它们构成了程序设计的核心结构。本文将详细探讨这两个概念,以及如何在Java小程序中有效利用它们。 首先,我们来看类。类是Java中的蓝图,它定义了具有相同...
Java编程语言是面向对象的、跨平台的编程语言,由Sun Microsystems(现为Oracle Corporation的一部分)于1995年发布。它以其“一次编写,到处...每个具体任务都会引导学生探索Java的不同方面,从而逐步提升其编程技能。
10. **接口私有方法和静态方法**:Java 8还允许接口定义私有方法和静态方法,增强了接口的功能性和复用性。 在学习这个中文文档时,建议结合官方的英文文档一起查阅,以便获取最准确的信息。对于初学者,理解并熟练...