【Java 07】面对对象(中) - instanceof、向下转型、equals、toString、JUnit单元测试、包装类

本文深入探讨Java中的多态性,包括向上转型与向下转型的风险,`instanceof`操作符的使用及注意事项。详细讲解了`Object`类的`equals()`和`toString()`方法,以及它们的重写。此外,还介绍了`JUnit`单元测试的基本用法和Java包装类的概念,包括自动装箱与拆箱、与字符串的相互转换等核心概念。
摘要由CSDN通过智能技术生成

一 面向对象中三

1 多态如何才能调用子类特有的属性和方法?

1.1 向上转型(多态)、向下转型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9nfLJBnO-1596991631246)(C:\Users\吴淼杰\Desktop\笔记\Java\Java07 面向对象中三\image-20200809032631785.png)]

Person p2 = new Man();//多态
Man m1 = (Man)p2;//向下转型
m1.earnMoney();//调用子类特有的属性和方法
m1.isSmoking = true;//调用子类特有的属性和方法

1.2 风险

强制类型转化风险:精度损失

向下转型风险:转不成功

//Person p2 = new Man();
Woman w1 = (Woman)p2;
w1.goShopping();//出错,java.lang.ClassCastException	类型转换异常

2 instanceof操作符

2.1 格式

x instanceof A:检验x是否为类A的对象,返回值为boolean型,如果是,返回ture,否则false

2.2 注意

  • 要求x所属的类与类A必须是子类和父类的关系,否则编译错误

  • 如果x属于类A的子类B,x instanceof A值也为true

    (如果类B是类A的父类,则【a instanceof A】返回ture 【a instanceof B】也返回ture。)

2.3 代码

使用情景:为了避免在向下转型时出现java.lang.ClassCastException类型转换异常,所有在向下转型之前,先进行instanceof判断,一旦返回true,就进行向下转型,如果返回false,不进行向下转型

if(p2 instanceof Man){
   //ture
    Man m1 = (Man)p2;//向下转型
	m1.earnMoney();
}

if(p2 instanceof WoMan){
   //false
    Woman w1 = (Woman)p2;//向下转型
	w1.goShopping();
}

2.4 练习

2.4.1 编译时通过,运行时不通过
Person p3 = new Man();
Woman w3 = (Woman)p3;


Person p3 = new Person();
Woman w3 = (Woman)p3;
2.4.2 编译时通过,运行时通过
Object obj = new Man();//Man p = (Man)obj;
Person p = (Person)obj;//强转成Man都是,Person更可以

A 要想向下转型成功,则new的是B或子类的C

↓ A a = new B();// A a = new C();

B B b = (B)a;

↓ C b = (C)a;

C

2.4.3 编译不通过
Man m5 = new Woman();

3 多态练习(开发不要出现,练习而已)

class Base{
   
	int count1 = 1;
	int count = 10;
    
    public void display(){
   
        System.out.println(this.count);
    }
}

class Sub extends Base{
   
	int count2 = 2;
	int count = 20;
    
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值