《Java开发手册》学习进程之对象引用与接口引用间的赋值和强制类型转换问题

对象引用之间:

  • 子类引用可以赋值给父类引用。
  • 父类引用需要在强制转换之后才能赋值给子类引用。
  • 对于对象引用的强制转换,只要被转换的引用类型与转换后的目标类型之间是派生或被派生的关系,就可以通过编译。如果没有这些关系而去强制转换,则编译报错
  • 即使编译通过,如果被转换的引用指向的对象类型与转换后的目标类型之间不相符或不兼容(即被转换的引用指向的对象类型不能转换为除自身或者自身父类的其他类型,同下),则运行出错

接口引用之间:

  • 子接口引用可以赋值给父接口引用。
  • 父接口引用需要在强制类型转换之后才能赋值给子接口引用。
  • 没有继承关系的接口引用也可以在强制类型转换之后进行赋值。这点与对象引用不同。
  • 任意两个接口引用都可以进行强制类型转换,而不必担心编译不通过(接上一点)。
  • 即使编译通过,如果被转换的接口引用指向的对象类型没有实现转换后的接口,则运行出错

类引用与接口引用间的赋值:

  • 类引用赋给接口引用不需要进行强制类型转换,但编译时会检查类是否实现了接口,否则,编译报错
  • 接口引用赋给类引用要进行强制类型转换,但如果要进行强制类型转换,被转换后的类的目标类型必须实现了接口,否则,编译报错。即使编译通过,如果被转换的接口引用指向的对象类型与转换后的目标类型之间不相符或不兼容,则运行出错
时间: 2024-08-26 01:09:47

《Java开发手册》学习进程之对象引用与接口引用间的赋值和强制类型转换问题的相关文章

【转】线程池体系介绍及从阿里Java开发手册学习线程池的正确创建方法

jdk1.7中java.util.concurrent.Executor线程池体系介绍 java.util.concurrent.Executor : 负责线程的使用与调度的根接口  |–ExecutorService:Executor的子接口,线程池的主要接口  |–ThreadPoolExecutor:ExecutorService的实现类  |–ScheduledExecutorService:ExecutorService的子接口,负责线程的调度  |–ScheduledThreadPo

从阿里Java开发手册学习线程池的正确创建方法

前言 最近看阿里的 Java开发手册,上面有线程池的一个建议: [强制]线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险. 结合最近面试的经历,发现这条建议还是十分有用的,因为自己经常使用Executors提供的工厂方法创建线程池,所以忽略了线程池内部的实现.特别是拒绝策略,面试被问到两次,因为使用Executors创建线程池不会传入这个参数而使用默认值所以我们常常忽略这一参

阿里Java开发手册学习 3 MYSQL规约

建表规约 1.表达是与否概念的字段,必须使用is_XXX的方式命名,数据类型是 unsigned tinyint (1表示是,0表示否). 2.表名不使用复数名词. 3.禁用保留字. 4.小数类型为decimal,禁止使用float和double. 5.表的命名最好是加上"业务名词_表的作用" . 6.修改字段时要及时更新字段注释. 7.字段允许适当冗余,以提高性能. 8.单表行数超过500万行或者单表超过2G时才考虑分库分表. 9.合适的字符存储长度,不但节约数据库表空间.节约索引存

阿里巴巴Java开发手册剖析-01.尽量不要在接口里定义变量

[推荐]接口类中的方法和属性不要加任何修饰符号(public 也不要加) ,保持代码的简洁性,并加上有效的 Javadoc 注释.尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量. 在effective java中文版第2版中第19条:接口只用于定义类型 当类实现接口时,接口就充当可以引用这个类的实例的类型(type).因此.类实现了接口,就表明客户端可以对这个类的实例实施某些动作.为了任何其他目的而定义接口是不恰当的. 有一种接口被称为常量接口,它不

《Java开发手册》学习进程之第9章接口

接口中的成员变量: 与类不同,在接口中只能定义常量属性,并且可以不必使用public.statict和final修饰,因为即使不使用这些修饰符,编译时也会为其加上,即接口中的成员变量隐含的是"public static final"的.另外,必须在声明的同时给出其值. 接口中的方法: 接口中的方法必须是抽象的,原因是接口只是代表了一个契约,表示实现它的类有什么样的功能,具体实现是由实现它的类完成的. 接口中的方法必须是public.abstract的,不能像接口中的成员变量一样使用fi

Java开发手册 Java学习手册教程(MtJava开发手册)

本文档的版权归MtJava文档小组所有,本文档及其描述的内容受有关法律的版权保护,对本文档内容的任何形式的非法复制,泄露或散布,将导致相应的法律责任. MtJava只是一个学习Java的简化版本,适合有一些Java基础的人学习参考,主要是为了辅助MtAndroid的学习者学习的文档 Java开发手册 Java学习手册教程(MtJava开发手册),布布扣,bubuko.com

《Java开发手册》学习进程之第10章构造器应用

构造器与返回类型: 构造器没有返回类型,若将返回值类型(包括void)添加到构造器上,编译不会报错,但此时不再是构造器了,而只是一个与所在类同名的方法而已. 构造器与方法是两个不同的概念: 构造器不能像方法一样能被对象引用调用. 构造器是创建对象时需执行的代码,由new调用.方法是类或对象具有的行为,由引用调用. 无参数的构造器(资料来源:<Java核心技术卷1(中文第9版)>127页): 如果在编写一个类时没有编写构造器,那么系统就会提供一个无参数的构造器.这个构造器将所有实例域设置为默认值

阿里巴巴Java开发手册正确学习姿势是怎样的?刷新代码规范认知

很多人都知道,阿里巴巴在2017发布了<阿里巴巴Java开发手册>,前后推出了很多个版本,并在后续推出了与之配套的IDEA插件和书籍. 相信很多Java开发都或多或少看过这份手册,这份手册有7个章节,覆盖了编程规约.异常日志.单元测试.安全规约.MySQL数据库.工程结构以及设计规约等方面. 这份规约可以说是覆盖了Java开发的方方面面,如果还有人没看的话,强烈建议大家好好看看,并且仔细研读. 手册中,有那么一些规则,是比较容易理解的.比如一些变量命名规范,有另外一些规则,是不太容易理解的,背

Alibaba Java开发手册索引规约学习笔记

最近一段时间再看阿里巴巴 Java开发手册索引规约,写篇帖子总结一下,索引规约内容如下 索引规约1. [强制]业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引. 说明: 不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,但提高查找速度是明显的: 另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生. 2. [强制]超过三个表禁止 join.需要 join 的字段,数据类型必须绝对一致: 多表关联查询时,保证被关联的字段需要有