前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java的学习笔记(12)对象 七

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

作者头像
卢衍飞
发布于 2023-02-13 13:29:31
发布于 2023-02-13 13:29:31
51100
代码可运行
举报
文章被收录于专栏:技术分享交流技术分享交流
运行总次数:0
代码可运行

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

package oop.Demo07;

public class Application {

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 {

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void run(){
    System.out.println("run");
}

} package oop.Demo07;

public class Student extends Person{

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 {

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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. 方便方法的调用,减少重复的代码,简洁

  */

}

}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023 年 01 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java的学习笔记(11)对象 六
方法名必须相同 参数列表必须相同 修饰符:范围可以扩大,范围可以扩大不能缩小:public>protected>default>private 抛出异常:范围可以被缩小但是不能扩大;classNotFoundException -->Exception(大) 重写,子类的方法和父类的方法一致;方法体不同
卢衍飞
2023/02/13
1880
【Java 学习】:抽象类&接口
💢💢在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。
IsLand1314
2024/10/15
1730
【Java 学习】:抽象类&接口
java上转型和下转型(对象的多态性)
/*上转型和下转型(对象的多态性) *上转型:是子类对象由父类引用,格式:parent p=new son *也就是说,想要上转型的前提必须是有继承关系的两个类。 *在调用方法的时候,上转型对象只能调用父类中有的方法,如果调用子类的方法则会报错 *下转型:是父类向下强制转换到子类对象 *前提是该父类对象必须是经过上转型的对象。 * *代码示例:*/
用户3030674
2018/09/14
2.3K1
Java基础-封装、继承、多态
Java是一门面向对象非常好的语言,拥有面向对象的三个基本特征:封装、继承、多态。
越陌度阡
2024/05/24
1.1K0
Java基础-封装、继承、多态
Java面向对象三大特性(封装、继承、多态)
OOP 语言:也就是面向对象编程。 面向对象的语言有三大特性:封装、继承、多态。三大特性是面向对象编程的核心。下面就来介绍一下面向对象的三大特性。 如果想了解面向对象可以看一下这一篇博客类和对象
全栈程序员站长
2022/09/17
3450
Java面向对象三大特性(封装、继承、多态)
Java 面向对象
概述:对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。
星姮十织
2021/12/25
9020
Java的学习笔记(10)对象 五
Java中只有单继承,没有多继承。“一个爸爸有多个儿子,一个儿子只有爸爸”: Object——>Persion
卢衍飞
2023/02/13
1420
一篇文章让你掌握多态
多态的概念呢比较简单,就是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果
TestOps
2022/04/07
1920
一篇文章让你掌握多态
java面向对象编程知识小结(一)
Java是一种面向对象的编程语言。面向对象编程,英文是Object-Oriented Programming,简称OOP。面向对象编程,是一种通过对象的方式,把现实世界映射到计算机模型的一种编程方法。
魚迹
2023/05/06
2120
java面向对象编程知识小结(一)
Java基础入门笔记05——面向对象,创建对象的内存分析,继承,封装,多态,object类,this&&super,方法重写,引用类型的强制转换,instanceof,抽象类,内部类,接口,异常。[通
1.使用new关键字创建对象,该类必须要有构造器 2.构造器用来实例化属性(给属性赋初值)
全栈程序员站长
2022/09/21
1K0
Java基础入门笔记05——面向对象,创建对象的内存分析,继承,封装,多态,object类,this&&super,方法重写,引用类型的强制转换,instanceof,抽象类,内部类,接口,异常。[通
Java核心-面向对象(中)
前一篇简单聊了一下类、对象,还有方法的相关定义和操作,现在来介绍一下面向对象的三大特性:封装、继承和多态。本次内容是我们学习的核心和重点。
reload
2024/01/20
2660
Java核心-面向对象(中)
java学习之路:25.类的继承,Object类,对象类型转换,instanceo关键字
类是可以继承的,在java中使用extends关键字类标识两个类的继承关系。 例如下面的图:
花狗Fdog
2020/10/28
6000
java学习之路:25.类的继承,Object类,对象类型转换,instanceo关键字
详解Java三大特性——多态
现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。
苏先生
2019/05/07
3700
详解Java三大特性——多态
第五节:详细讲解Java中的接口与继承
大家好,我是 Vic,今天给大家带来详细讲解Java中的接口与继承的概述,希望你们喜欢
达达前端
2019/07/03
4130
Java复习【知识改变命运】第六章
1.区别相同名的类 2.当类很多时候更好的管理[API文档] 3.控制访问范围
用户11319080
2024/10/17
880
Java复习【知识改变命运】第六章
Java多态(上)
向上转型、隐式转型、自动转型:子类对象转型为父类对象,可以调用子类重写父类的方法以及父类派生的方法,无法调用子类独有的方法
Breeze.
2022/04/11
5550
Java多态(上)
Java基础(多态的理解与应用)
定义格式:父类类型 变量名=new 子类类型();
全栈程序员站长
2022/09/08
5160
Java基础-面向对象(四)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/11/12
2870
JavaSE(二)之继承、封装、多态
学习完类与对象终于认识到什么是类,什么是对象了。接下来要看的就是java的三大特征:继承、封装、多态。 一、封装(数据的隐藏) 在定义一个对象的特性的时候,有必要决定这些特性的可见性,即哪些特性对外部是可见的,哪些特性用于表示内部状态。 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。 1.1、封装的步骤           1).使用private 修饰需要封装的成员变量。          2.)提供一个公开的方法设置或者访问私有的属性             
用户1195962
2018/01/18
7790
你是真的了解多态吗?谈谈你对多态的了解以及应用
现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。
Java学习
2018/07/25
4590
你是真的了解多态吗?谈谈你对多态的了解以及应用
推荐阅读
相关推荐
Java的学习笔记(11)对象 六
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验