体现:
父类的引用可以指向子类的对象
接口的引用可以指向实现类的对象
转型:
向上转型
由子类类型转型为父类类型,或者由实现类类型转型为接口类型
向上转型一定会成功,是一个隐式转换
向上转型后的对象,将只能访问父类或者接口中的成员
向下转型
由父类类型转型为子类类型,或者由接口类型转型为实现类类型
向下转型可能会失败,是一个显式转换
向下转型后的对象,将可以访问子类或者实现类中特有的成员
instanceof关键字
针对于向下转型的。
如果向下转型不成功,会怎样?
会有一个异常 ClassCastException
如何避免这种情况?
在向下转型之前,我们先判断一下这个对象是不是要转型的类型
怎么判断?
关键字 instanceof
Animal animal = new Dog();
if (animal instanceof Dog) {
[Java] 纯文本查看 复制代码
1
// 说明animal的确是一个Dog
}
如果一个类中重写了父类的某一个方法。此时:
如果用这个类的对象来调用这个方法,最终执行的是子类的实现。
如果用向上转型后的对象来调用这个方法,执行的依然是子类的实现。
因为向上转型后的对象,归根到底还是子类对象。
抽象类与抽象方法
抽象:abstract
抽象类:
​ 用关键字abstract修饰的类,就是抽象类
抽象方法:
​ 用关键字abstract修饰的方法,就是抽象方法
特点:
抽象方法:
抽象方法使用abstract来修饰,只有声明,没有实现。
public abstract void bark();
抽象方法,只能够写在抽象类中。
抽象类:
抽象类使用abstract来修饰,抽象类不能实例化对象。
抽象类中是可以写非静态的成员的,这时候这些非静态成员是可以继承给子类的。
抽象类中是可以包含构造方法的。
结合抽象类和抽象方法:
非抽象子类在继承一个抽象父类的同时,要实现父类中所有的抽象方法。
注意事项:
final关键字
抽象类可以用final来修饰吗?
不能!因为final表示这个类无法被继承。但是对于抽象类来说,如果无法被继承,则这个抽象类没有任何意义。
抽象方法可以用final修饰吗?
不能!因为final修饰的方法无法被重写。但是抽象方法又只能写在抽象类中。如果一个抽象方法用final来修饰了,此时这个方法将无法被非抽象子类重写,那这个子类就会有问题。
抽象类和抽象方法的实用场景:
可以用抽象类和抽象方法来实现一些简单规则的制定。
​ 例如:所有的快递公司都必须要会xxxxx。KFC、麦当劳、
如果仅仅用抽象类和抽象方法来进行规则指定、行为约束:
​ 弊端:因为Java是单继承的语言,如果一个类为了遵循某一种规范,而去继承一个抽象类,此时这个类将无法再继承其他类。
​ 为了解决这样的问题,我么可以使用接口进行行为约束,规范代码。
接口
关键字:interface
语法:
​ 和类是比较像的,但是他不是类
[访问权限修饰符] interface 接口名字 {
[Java] 纯文本查看 复制代码
1
// 接口中的成员
}
访问权限修饰符:和类一样,只能有 public 和默认的default权限。
接口不是类,不能实例化对象。
接口,暂时和类写成平级的关系。
接口名字是一个标识符,遵循大驼峰命名法
接口中成员的定义:
属性:接口中的属性,默认的修饰符是 public static final
构造方法:接口中不能写构造方法
方法:
接口中的方法都是抽象方法
接口中的方法访问权限修饰符都是public
接口是需要被类来实现的。
实现接口关键字: implements
让类实现接口:
public class Shunfeng extends Company implements Express {
}
一个非抽象类在实现接口后,需要实现接口中所有的抽象方法。
一个类在继承自一个父类后,还可以再去实现接口。
如果同时有父类和接口,那么继承父类在前,实现接口在后
一个类可以实现多个接口
如果一个类实现的多个接口中有相同的方法,这个方法在实现类中只需要实现一次即可。
接口之间是有继承关系的,而且接口之间的继承是多继承。
public interface GrilFriend extends HouseKeeping, Takecare {
}

Java实用教程系列之对象的转型的更多相关文章

  1. Netty4.x中文教程系列(四) 对象传输

    Netty4.x中文教程系列(四)  对象传输 我们在使用netty的过程中肯定会遇到传输对象的情况,Netty4通过ObjectEncoder和ObjectDecoder来支持. 首先我们定义一个U ...

  2. Java WebService 教程系列之 Spring 整合 CXF

    Java WebService 教程系列之 Spring 整合 CXF 一.引入 jar 包 <dependency> <groupId>org.apache.cxf</ ...

  3. Unix sed实用教程系列目录[已完成]

    本系列文章已经译完了,译自awk-sed@theunixschool,收获颇丰,作者没有讲明白的我做了补充,并且尝试讲的更清楚,整理成系列索引,方便学习,开篇非译文,是我为了方便后面的理解写的一篇,感 ...

  4. Java基础教程——类和对象

    视屏讲解:https://www.bilibili.com/video/av48272174 面向过程 VS 面向对象 面向过程:强调步骤. 面向对象:强调对象. 面向对象的特点就是:隐藏具体实现的细 ...

  5. SpringBoot系列之RabbitMQ使用实用教程

    SpringBoot系列之RabbitMQ使用实用教程 @ 目录 1. 消息队列概述 1.1 MQ的概述 1.2 MQ目的地形式 2. 消息队列实现方式 2.1 常见MQ框架 2.2 MQ实现方式 3 ...

  6. 【Java学习系列】第3课--Java 高级教程

    本文地址 可以拜读: 从零开始学 Java 分享提纲: 1. Java数据结构 2. Java 集合框架 3. Java泛型 4. Java序列化 5. Java网络编程 6. Java发送Email ...

  7. 学习笔记之Java程序设计实用教程

    Java程序设计实用教程 by 朱战立 & 沈伟 学习笔记之JAVA多线程(http://www.cnblogs.com/pegasus923/p/3995855.html) 国庆休假前学习了 ...

  8. CRL快速开发框架系列教程十(导出对象结构)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. JavaSE(五)JAVA对象向上转型和向下转型

    今天做了一个测试的题目,发现自己还是很多问题没有静下心来做.很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了.所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话 ...

随机推荐

  1. java数据库连接池比较

    dbcp dbcp可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池吧.这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有.这个连接 ...

  2. 计蒜客 一维坐标的移动(BFS)

    在一个长度为 n 的坐标轴上,蒜头君想从 A 点 移动到 B 点.他的移动规则如下: 向前一步,坐标增加 1. 向后一步,坐标减少 1. 跳跃一步,使得坐标乘 2. 蒜头君不能移动到坐标小于 0 或大 ...

  3. JunOS SRX firewal Web authentication(转)

    转载自:https://srxasa.wordpress.com/2011/12/11/junos-srx-firewal-web-authentication/ JunOS SRX firewal ...

  4. 吴裕雄--天生自然 JAVA开发学习:基本数据类型

    public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.println ...

  5. Java 工厂模式登陆系统实现

    没有工厂模式 设定一个登陆系统 UserServiceImp.java public class UserServiceImp { public boolean login(String userna ...

  6. React Native 开发

    摘自:<React Native 开发之 IDE 选型和配置> 一个在不断更新的有关React Native讲解:<江清清的技术专栏> ES5和ES6的区别:<React ...

  7. 4.windows-oracle实战第四课 -表的查询

    所有语句均为安装oracle数据库后scott的默认表emp,dept等表 1.自己插入自己:insert into 表名 (字段)select *from 表名 2.去除重复行: select di ...

  8. 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第七天】(redis缓存)

    https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...

  9. Mongo学习记录

    引子 最近做项目利用mongo记录的日志做数据统计.着了非关系型数据库的迷,于是乎买了本<MongoDB实战>学习了一番.记录一下学习笔记,共享之. 准备 我在自己的Linux服务器上装了 ...

  10. vim的背景配置

    1.vim背景颜色的配置 在usr/share/vim/vim74/colors   目录下有可以配置的颜色方案,可以查看: 命令:vim/etc/vimrc 打开vim的配置文件,   在最后加入一 ...