Java 抽象、向上向下转型拆装箱_java抽象方法可以在测试类中向下转型吗_小猿king的博客-程序员宅基地

技术标签: java  intellij-idea  

一、向上转型向下转型

明确引用类型和对象类型的概念
 首先要知道那个是引用类型,那个是对象类型
 Hero h = new Hero();
 有一个对象 new Hero(), 有一个引用 h
 引用类型 ----> Hero

向上转型:子类转为父类类型
 Zi zi = new Zi();
 zi.setSex("男");
 zi.setMajor("美容美发");
 boolean flag = zi instanceof Fu;
 System.out.println(flag);

 Fu fu = zi;
 //调用了子类中的toString方法
 System.out.println(fu);

向下转型:父类转换成子类对象
 向下转型的对象,必须使用instanceof关键字进行判断,是否可以向下转型
 Fu fu = zi;
 //调用了子类中的toString方法
 System.out.println(fu);

 Fu fu1 = new Student("张无忌",25,"武当山职业技术学院光明顶分校","校长");
 System.out.println(fu1);

 //Fu f = new Fu("张三丰",101);
 //boolean flag2 = f instanceof Zi;
 //System.out.println(flag2);//false

 //ClassCastException
 //抛出表示代码尝试将对象转换为不属于实例的子类
 //Zi zi1 = (Zi)f;
 //System.out.println(zi1);

 if(fu1 instanceof Student){
 Student student = (Student)fu1;
 System.out.println(student);
 }

 if(fu1 instanceof Zi){
 Zi zi1 = (Zi)fu1;
 System.out.println(zi1);
 }

三种区别:
 Zi zi = new Zi();
 1、自己定义的方法
 2、从父类中继承过来的方法
 3、存在重写,则调用重写之后的方法

 Fu fu = new Fu();
 只能调用父类自己的方法

 Fu fu = new Zi();
 1、父类自己的方法
 2、如果子类重写了父类的方法,可以调用重写之后的方法

二、抽象类:
 使用abstract进行修饰的类
 特点:
 1、不能够直接使用抽象类创建对象,必须通过子类继承并且实现里面的抽象方法,
 再通过子类进行创建对象使用
 2、抽象类和抽象方法都需要使用abstract进行修饰,抽象方法必须定义在抽象类中
 3、只有实现类父类中所有的抽象方法都被实现之后,子类才能创建对象,否则子类也
 要变成一个抽象类
 4、抽象类,可以没有抽象方法,但是没有抽象方法的抽象类,没有存在的意义
 5、抽象类也可以继承抽象类(单继承,只能继承一个直接的抽象了)
 6、抽象类中可以有构造函数,但是无法创建对象

 什么情况下定义成抽象
 1、当类中有抽象方法的时候
 有抽象方法的类是不是抽象类?
 抽象类中是否必须有抽象方法?
 2、当子类继承一个抽象类的时候,不想实现抽象类中的抽象方法,那么就把子类也变成抽象类
 3、当一个类实现一个接口的时候,能不能继承抽象类?
 当一个类实现一个接口的时候,不能实现所有的抽象方法
 抽象类中能不能有普通的方法
 4、抽象方法必须放在抽象类中
 抽象类中可以没有抽象方法,但是如果没有的话,抽象类就失去了抽象的意义

 抽象类语法
 public abstract class 类名{
 }
 抽象方法语法
 没有方法体的方法,abstract和方法体之间只能保留一个
 public abstract ({参数列表});
 特点:
 没有方法体,也没有花括号
 不能和
 private 私有的,子类无法继承,就无法进行抽象方法的实现
 static 静态的方法是属于类的
 final 修饰的方法不能被重写
 关键字一起使用


 什么时候把类定义成一个抽象类?
 当不知道一个方法具体的方法实现内容的时候定义成一个抽象方法
 抽象方法又必须定义在抽象类中
 知道所有的子类中都必须拥有一个方法,但是所有的子类的实现方法都
 不同,那么父类提供的方法就失去了意义,那么父类中就提供一个抽象的
 方法出来,让子类去实现

 1、抽象类一定是一个父类么?
 是的,因为抽象类是不断抽取出来,一般把共性的一些子类都有的方法
 但是不知道子类具体实现的步骤,要把这些定义在父类中完成抽象方
 法的定义

 2、抽象类中是否可以不定义抽象方法?
 可以,但是这个没有抽象方法的抽象类的意义何在?
 就是无法创建对象,方法也无法调用

 3、abstract不能和什么一起使用
 private
 static
 final
 4、抽象方法:只有方法的声明,没有具体实现的方法
 抽象类:有抽象方法的类叫抽象类

 基本数据类型的封装类型
 在java中8个基本数据类型都有与它对应的封装类型
 因为基本数据类型不能调用方法和属性
 所以要通过封装类型来访问属性和方法

三、装箱拆箱
 byte ---> Byte
 short ---> Short
 int ---> Integer
 long ---> Long
 float ---> Float
 double ---> Double
 char ---> Character
 boolean ---> Boolean

3、String转基本类型
 除了char类型之外,其余的基本数据类型都符合
 封装类型 变量名 = new 封装类型("字符串内容为与对应封装类型格式相同的数据");

 还可以通过基本数据类型的封装类型中的parseXXX(String s),将字符串转换为对应类型的数据

 Byte 类 static byte parseByte(String s)
 将字符串参数解析为带符号的十进制byte

 Short 类 static short parseShort(String s)
 将字符串参数解析为带符号的十进制short

 Integer 类 static int parseInt(String s)
 将字符串参数解析为带符号的十进制int

 Long 类 static long parseLong(String s)
 将字符串参数解析为带符号的十进制Long

 Float 类 static float parseFloat(String s)
 将字符串参数解析为带符号的十进制Float

 Double 类 static double parseDouble(String s)
 将字符串参数解析为带符号的十进制Double

 Boolean 类 static boolean parseBoolean(String s)
 将字符串参数解析为带符号的十进制Boolean

 char可以使用String类型中的charAt方法将字符取出来
 char c = s.charAt(0);


int < ---- > Integer转换

 1、构造方法
 int a = 10;
 Integer x = new Integer(a);

 2、通过Integer类中的一个静态方法valueOf方法
 Integer z = Integer.valueOf(a);

自动装箱和自动拆箱
 自动装箱 int ----------- valueOf(int n) -------> Integer
 自动拆箱 Integer --------- intValue() -----------> int

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Hello_qjh/article/details/123558132

智能推荐

浏览器地址栏的组成部分_浏览器地址组成-程序员宅基地

浏览器地址栏的组成部分举例:http://127.0.0.1:8848/web2012/index.html#main1?wd=xxx&name=sdsURL(网址)组成:第一部分:httphttp即数据传输协议。协议是一种规范或标准,需要按照这个标准进行数据传输,如果不加,浏览器不会执行数据传输。第二部分:127.0.0.1:8848主机:IP/域名 + 端口号127.0.0.1 IP/域名8848 端口号:区分同一台电脑上多个服务第三部分:web2012/index.ht_浏览器地址组成

RedHat 6.5 使用CentOS源更新-程序员宅基地

目前,163和sohu的镜像都不再提供CentOS 6.5的更新了,只能使用vault源。本文使用中科院的vault源http://yum.csdb.cn/vault.centos.org使用其它文章的方法,将yum源设置成163的源,然后进入 /etc/yum.repos.dvi CentOS6-Base-163.repo:%s/mirrors\.163\.com/yum\.

想学数据分析但不会Python,过来看看SQL吧(上)~-程序员宅基地

作者:贾胜杰,硕士,退役军人,电气工程专业,现成功转行K12领域数据挖掘工程师,不仅在数据清理、分析和预测方向,而且在自制力和高效学习方面都有丰富经验。编辑:王老湿SQLSQL基础:语法,检索,排序,过滤,创建计算字段和使用别名;SQL进阶:链接表,聚合,分组,条件判断,子查询以及时间序列的处理;PythonPython基础:语法,数据类型,运算符,控制流,函数,脚本编写及本地环境搭建;Pytho..._不会sql语句用python可以查询吗

CTFHub_2021-第四届红帽杯网络安全大赛-Web-WebsiteManger_swpu_jx_1998的博客-程序员宅基地

CTFHub_2021-第四届红帽杯网络安全大赛-Web-WebsiteManger(布尔盲注、SSRF )场景描述:最新的网站测试器,作为非站长的你,能利用好它的功能吗?场景打开后,如下,是个登录框查看源码,发现可能的注入点 /image.php?id=2布尔盲注/image.php?id=if(1=1,1,5) True/image.php?id=if(1=2,1,5) False条件为真时?id=1,回显第一张图片,条件为假时?id=5,没有id=5的图片,什么都没有。即可_2021-第四届红帽杯网络安全大赛-web-websitemanger

MinGW, MSYS介绍_msys 介绍-程序员宅基地

MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist GNU on Windows的略称。详情请参考。这里的“纯粹”是指「使用msvcrt.dll的应用程序」。无法使用MFC (Microsoft Foundation Classes)。MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你生成本地_msys 介绍

ubuntu14.04安装opencv3.0 Failed to download ICV package: ippicv_linux_20140513.tgz.-程序员宅基地

编译opencv3.0出现以下问题:Make Error at 3rdparty/ippicv/downloader.cmake:75 (message): ICV: Failed to download ICV package: ippicv_linux_20140513.tgz. Status=28;"Timeout was reached"Call Stack (most rece...

随便推点

基于fork机制的qemu 共享内存热升级实现_qemu 多线程fork-程序员宅基地

qemu 热升级一般是通过热迁移来实现的,跨主机的热迁移或者本地的热迁移都能用于qemu 的热升级。基于热迁移的方案存在以下几个主要问题: a. 消耗资源多; b. 升级过程较长;c. 业务有感知。导致这些问题的一个最主要的因素是在热迁移的过程中要迭代传输大量的guest内存数据。在跨主机的热迁移场景中,内存数据的复制传输不可避免,但是在同一个物理机上,可以通过某种共享内存的机制避免数据复制,从而..._qemu 多线程fork

QT QSTring,qint string,const char数据类型转换(实例教程)-程序员宅基地

QString类提供了丰富的转换函数,可以将一个字符串转换为数值类型或者其他的字符编码集。QString::toInt()函数将字符串转换为整型数值,类似的函数还有toDouble()、toFloat()、toLong()、toLongLong();1、 int, float , double类型 转换为QString有两种方法:A . 使用ar...

一个不错的cef的封装-程序员宅基地

http://git.oschina.net/daemon_process/EasyCKLapi很简单,使用起来方便多了。如果再配合我的miniblink,就更屌了

最新最全论文合集——CRYPTO 历年最佳论文汇总_crypto 论文_AMiner学术搜索和科技情报挖掘的博客-程序员宅基地

AMiner平台(https://www.aminer.cn)由清华大学计算机系研发,拥有我国完全自主知识产权。平台包含了超过2.3亿学术论文/专利和1.36亿学者的科技图谱,提供学者评价、专家发现、智能指派、学术地图等科技情报专业化服务。系统2006年上线,吸引了全球220个国家/地区1000多万独立IP访问,数据下载量230万次,年度访问量超过1100万,成为学术搜索和社会网络挖掘研究的重要数据和实验平台。必读论文:https://www.aminer.cn/topic论文集地址:https:/._crypto 论文

mac 配置php和mysql_如何在mac配置php和mysql-程序员宅基地

展开全部工具:32313133353236313431303231363533e78988e69d8331333361326265Apache 2.4.16、PHP、Macbook Pro、MySQL5.7步骤:1、打开终端,输入命令:sudo apachectl start,启动Apache。2、打开ie浏览器,在地址栏中输入localhost,出现It Works字符串,就说明Apache已..._mac运行php与mysql

Doubel精度运算工具类(加减乘除)_double 工具类 精度想加减_0x422的博客-程序员宅基地

Doubel精度运算工具类(加减乘除)_double 工具类 精度想加减