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

智能推荐

int test(a,b,c)中的形参_int a ; test(a*)-程序员宅基地

void test3_1(int a, int b, int c){ cout<<*(&c-2);//标记行1}void test3(){ int x,y,z; cin>>x>>y>>z; test3_1(x,y,z);}输入:1 2 3输出:1在标记行1中输出的是1,即是a的值,因为函数调用中,是按实参表从右到左的顺序把参数压入栈中,且地址从高到低所以c的地址-_int a ; test(a*)

袁磊老师的课,Vue全家桶(一)_袁老师 vue 大师课-程序员宅基地

一、单页面应用spa就是只有一张web页面的应用,就是加载单个html。优点:页面切换快缺点:首屏时间稍慢,SEO(搜索引擎优化)差 “搜索引擎还读不懂单页面,搜索引擎擅长读的是多页面”二、路由 vue-router基本使用:<router-link to="/home">主页</router-link> <router-view..._袁老师 vue 大师课

eclipse 安装 EclEmma 插件-程序员宅基地

2019独角兽企业重金招聘Python工程师标准>>> ..._eclipse安装eclemma插件

poj 1200字符串hash-程序员宅基地

题意:给出不同字符个数和子串长度,判断有多少个不同的子串 思路:字符串hash。 用字符串函数+map为什么会超时呢?? 代码:#include #include #include using namespace std;const int N=16000005; //题目给出子串的最大和不超过16Mconst int NUM=257;bool

yocto 知:BitBake用户手册-程序员宅基地

本手册提供有关 BitBake 工具的信息。这些信息试图尽可能独立于使用 BitBake 的系统,例如 OpenEmbedded 和 Yocto 项目。在某些情况下,手册中会使用构建系统上下文中的场景或示例来帮助理解。对于这些情况,手册清楚地说明了上下文。

[Nutch]Apache Solr的安装和配置-程序员宅基地

Apache Solr的安装和配置方法。

随便推点

VB基础 _无效外部过程-程序员宅基地

VB入门1.1 知识要点1.VB的特点、安装和启动了解VB面向对象、可视化、事件驱动的特点。2.VB集成开发环境初学者主要掌握菜单栏、工具栏、工具箱窗口、属性窗口、代码窗口、工程资源管理器窗口的使用。3.VB对象的概念,对象的属性、方法和事件三要素4.创建VB应用程序的过程5.掌握窗体、标签、文本框、命令按钮控件的常用属性、方法和事件的使用6.VB应用_无效外部过程

java+web+pv+uv+统计_通过Nginx统计网站的PV、UV、IP_云云众生w的博客-程序员宅基地

概念UV:独立访客;以cookie为依据,假设一台电脑装有3个不同的浏览器,分别打开同一个页面,将会产生3个UV。PV:访问量;页面每访问或刷新一次,将会产生一个PV。IP:独立IP地址;以公网IP为依据,每个独立IP访问该页面,将会产生一个IP。nginx配置在vhost的conf文件中配置以下信息,请将此conf文件的权限设为777,否则无法自动生成日志文件。#日志格式化log_format ..._nginx 统计 ip,pv,uv,vv

一个网站开发的工作流程-程序员宅基地

第一步、进行需求分析当客户提出想做一个什么样网站的时候,我们就必须弄清楚客户需求,进行需求分析。有人会问:需求分析,分析什么呢?比如说:客户想要做的网站的类型是什么?风格是什么样的?有没有具体的要求?以及服务器空间的要求。第二步、网站草图重新确定其需求分析,并根据用户需求分析,规划出网站的内容板块草图。俗称:网站草图。第三步、美工设计阶段 然后根据网站草图,由美工制作成效果图。就好比建...

html自学微盘,小白入门也不难,5个必备「自学前端资源网站」快拿走_文笔二杨医生的博客-程序员宅基地

原标题:小白入门也不难,5个必备「自学前端资源网站」快拿走出于工作原因,最近接触了很多想转行的朋友,很多人跃跃欲试却又不敢转到前端这一行,都是因为害怕自己搞不懂、学不会编程,搞不定代码。很明白大家心中的这种顾虑,但既然已经有了这个转行或者学习的心思,不妨先自己看一看学一学。这里给想要尝试的大家整理了5个必备「自学前端资源网站」博客园 一个面向开发者的知识分享社区,一个IT技术人员想为IT技术人员们...

一个springboot项目如何进行模块化改造_springboot让一个包变成一个modules-程序员宅基地

一个springboot项目如何进行模块化改造就是我们自己写的springboot项目如果要分模块以便于与其他模块进行整合该如何进行呢,下面介绍一下首先我们把maven里面的jdk版本指定一下,当然你也可以模块化完成后进行,为了避免不必要的问题这里还是先指定一下,因为我们maven默认的话jdk是1.5的,这里我们找到我们本地maven地址打开setting.xml进行编辑保存退出后,我们打开我们项目的本地地址,然后退出我们idea中的项目这里我们只要保存src和pom.xml其他的删掉,删_springboot让一个包变成一个modules

memcached-session-manager使用总结-程序员宅基地

在做tomcat中session集群时,遇到了一个问题,怎么让session存到缓存中,网上搜索资料,发现了memcached-session-manager(简称:msm)分享地址:https://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration上面的文章,讲解了msm怎么配置的全过程。