Java的学习笔记(12)对象 七

简介: 对象13.1:instanceofinstanceof(类型转换)引用类型,判断一个对象是什么类型package oop.Demo07;public class Application { public static void main(String[] args) { // Object > String // Object > Person > Teacher // Object > Person > Student Object object = new Student(); // System

对象13.1:instanceof

instanceof(类型转换)引用类型,判断一个对象是什么类型

package oop.Demo07;
public class Application {
    public static void main(String[] args) {
      //  Object > String
      //  Object > Person > Teacher
      //   Object > Person > Student
       Object object = new Student();
       // System.out.println(X instanceof  Y);  能不能编通过,X与Y是否纯在父子关系
        System.out.println(object instanceof Student);     //ture
        System.out.println(object instanceof Person);       //ture
        System.out.println(object instanceof Object);       //ture
        System.out.println(object instanceof Teacher);      //false    此处的object是Student类型的,与Teacher不是父子关系
        System.out.println(object instanceof String);       //false
        Person person = new Student();
        System.out.println(person instanceof Student);     //ture
        System.out.println(person instanceof Person);       //ture
        System.out.println(person instanceof Object);       //ture
        System.out.println(person instanceof Teacher);      //false
    //    System.out.println(person instanceof String);       //编译报错,没有关系就报错
        Student student = new Student();
        System.out.println(student instanceof Student);     //ture
        System.out.println(student instanceof Person);       //ture
        System.out.println(student instanceof Object);       //ture
      //  System.out.println(student instanceof Teacher);      //编译报错
        //    System.out.println(student instanceof String);       //编译报错
    }
}
package oop.Demo07;
public class Person {
    public void run(){
        System.out.println("run");
    }
}
package oop.Demo07;
public class Student extends Person{
    public void go() {
        System.out.println("go");
    }
}
package oop.Demo07;
public class Teacher extends Person{
}

对象13.2 类型之间的转换

// 父类
public class Parent {}
// 子类
public class Son extends Parent {}
// 女儿类
public class Daughter extends Parent {}

子类转父类

Son son = new Son();
Parent parent = (Parent) son;

运行没问题

父类的引用指向子类转父类对象

Parent son = new Son();
Parent parent = (Parent) son;

运行没问题,这种肯定也是可以的

父类转子类

父类的引用指向父类转子类对象

Parent parent = new Parent();
Son son = (Son) parent;

运行有问题会报 ClassCastException

父类的引用指向子类转子类对象

Parent parent = new Son();
Son son = (Son) parent;

运行没有问题

父类的引用指向子类转另一个子类对象

Parent parent = new Son();
Daughter daughter = (Daughter) parent;

运行时报出 ClassCastException 的异常

package oop.Demo07;
public class Application {
    public static void main(String[] args) {
        //  Person父类  run()方法   ,   Student子类 go()方法
        // 父类的方法,子类可以用,但是子类特有的方法,父类不可以调用
        Person person = new Person();
        person.run();
        //  person.go();   子类特有的方法,父类不可以调用
        Student student1 = new Student();
        student1.go();
        student1.run();
        //向上转型,子转父
        //也可以理解为将一个子类的对象转化为父类的对象(隐形转型,自动的),小类转大类
        Person one = new Person();
        one.run();
        Person two = new Student();
        //  父类引用子类实例,可以调用子类重写父类的的方法以及父类派生的方法,无法调用子类独有的方法
        //  注意:父类中的静态方法无法被子类重写,所以向上转型之后,只能调用到父类原有的静态方法。(如果父类中存在静态方法)
        two.run();
        // two.go();     报错,父类引用子类实例,无法调用子类独有的方法
        //子类转化为父类,可能会丢失自己本来的一些方法。  子类转父类,子类拓展的方法会丢失。
        // 向下转型,必须强转
        //类型之间的的转化 :父转子,向下转换要强制转换,也就是父类转为子类要强转
         Person obj = new Student();
        // obj.go()   会报错, obj是父类Person对象实例,需要将obj转换为Student类型,才可以使用Student类型的方法
         Student student = (Student) obj;
         student.go();
        //二合一:  ((Student) obj).go();
     /*
     1. 父类引用指向子类的对象
     2. 把子类转换为父类,向上转型,直接转;
     3. 把父类转换为子类,向下转型,强制转换;
     4. 方便方法的调用,减少重复的代码,简洁
      */
    }
}
相关文章
|
1月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
261 0
|
5月前
|
Java API 微服务
2025 年 Java 从入门到精通学习笔记全新版
《Java学习笔记:从入门到精通(2025更新版)》是一本全面覆盖Java开发核心技能的指南,适合零基础到高级开发者。内容包括Java基础(如开发环境配置、核心语法增强)、面向对象编程(密封类、接口增强)、进阶技术(虚拟线程、结构化并发、向量API)、实用类库与框架(HTTP客户端、Spring Boot)、微服务与云原生(容器化、Kubernetes)、响应式编程(Reactor、WebFlux)、函数式编程(Stream API)、测试技术(JUnit 5、Mockito)、数据持久化(JPA、R2DBC)以及实战项目(Todo应用)。
351 5
|
2月前
|
小程序 Java 知识图谱
Java 学习笔记 —— BMI & BMR 计算器
这是一个使用 Java 编写的 BMI 与 BMR 计算器小程序,可输入年龄、性别、身高和体重,计算身体质量指数(BMI)和基础代谢率(BMR),并输出健康评估结果。通过该项目,掌握了 Java 的输入处理、数据验证、条件判断、数学运算及格式化输出等基础知识,是 Java 初学者的理想练习项目。
|
2月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
8月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
154 13
|
3月前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
3月前
|
存储 人工智能 JavaScript
Java从作用域到对象高级应用​
本内容详细讲解了JavaScript中的作用域类型(函数作用域、块作用域、全局作用域)、作用域链、垃圾回收机制、闭包、变量提升、函数参数、数组方法、内置构造函数、对象高级知识、原型链、对象赋值、深浅拷贝、递归、异常处理及this指向等内容,全面覆盖JS核心概念与编程技巧。
50 0
|
4月前
|
存储 Java
Java对象的内存布局
在HotSpot虚拟机中,Java对象的内存布局分为三部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头包含Mark Word、Class对象指针及数组长度;实例数据存储对象的实际字段内容;对齐填充用于确保对象大小为8字节的整数倍。
102 0
|
5月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
227 1
|
5月前
|
前端开发 Java 数据库连接
java bo 对象详解_全面解析 java 中 PO,VO,DAO,BO,POJO 及 DTO 等几种对象类型
Java开发中常见的六大对象模型(PO、VO、DAO、BO、POJO、DTO)各有侧重,共同构建企业级应用架构。PO对应数据库表结构,VO专为前端展示设计,DAO封装数据访问逻辑,BO处理业务逻辑,POJO是简单的Java对象,DTO用于层间数据传输。它们在三层架构中协作:表现层使用VO,业务层通过BO调用DAO处理PO,DTO作为数据传输媒介。通过在线商城的用户管理模块示例,展示了各对象的具体应用。最佳实践包括保持分层清晰、使用工具类转换对象,并避免过度设计带来的类膨胀。理解这些对象模型的区别与联系。
407 1