Java 抽象、向上向下转型拆装箱

一、向上转型向下转型

明确引用类型和对象类型的概念
 首先要知道那个是引用类型,那个是对象类型
 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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猿king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值