{"id":16214,"date":"2024-03-15T12:33:07","date_gmt":"2024-03-15T12:33:07","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/"},"modified":"2025-08-07T01:08:47","modified_gmt":"2025-08-07T01:08:47","slug":"how-to-correctly-perform-upcasting-and-downcasting-in-java","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/","title":{"rendered":"How to correctly perform upcasting and downcasting in J&#8230;"},"content":{"rendered":"<p>In Java, upcasting refers to assigning a subclass object to a superclass reference variable, while downcasting refers to forcibly converting a superclass reference variable to its subclass object.<\/p>\n<p>Example of upward transformation:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">Animal<\/span> {\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">sound<\/span><span class=\"hljs-params\">()<\/span> {\r\n        System.out.println(<span class=\"hljs-string\">\"Animal makes sound\"<\/span>);\r\n    }\r\n}\r\n\r\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">Dog<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title class_\">Animal<\/span> {\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">sound<\/span><span class=\"hljs-params\">()<\/span> {\r\n        System.out.println(<span class=\"hljs-string\">\"Dog barks\"<\/span>);\r\n    }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">Main<\/span> {\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">main<\/span><span class=\"hljs-params\">(String[] args)<\/span> {\r\n        <span class=\"hljs-type\">Dog<\/span> <span class=\"hljs-variable\">dog<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">Dog<\/span>(); <span class=\"hljs-comment\">\/\/ \u521b\u5efa\u5b50\u7c7b\u5bf9\u8c61<\/span>\r\n        <span class=\"hljs-type\">Animal<\/span> <span class=\"hljs-variable\">animal<\/span> <span class=\"hljs-operator\">=<\/span> dog; <span class=\"hljs-comment\">\/\/ \u5411\u4e0a\u8f6c\u578b\uff0c\u5c06\u5b50\u7c7b\u5bf9\u8c61\u8d4b\u503c\u7ed9\u7236\u7c7b\u5f15\u7528\u53d8\u91cf<\/span>\r\n        animal.sound(); <span class=\"hljs-comment\">\/\/ \u8c03\u7528\u7236\u7c7b\u5f15\u7528\u53d8\u91cf\u7684\u65b9\u6cd5\u4f1a\u6267\u884c\u5b50\u7c7b\u7684\u65b9\u6cd5<\/span>\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>The output result is:<\/p>\n<pre class=\"post-pre\"><code>Dog barks\r\n<\/code><\/pre>\n<p>An example of downcasting:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">Animal<\/span> {\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">sound<\/span><span class=\"hljs-params\">()<\/span> {\r\n        System.out.println(<span class=\"hljs-string\">\"Animal makes sound\"<\/span>);\r\n    }\r\n}\r\n\r\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">Dog<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title class_\">Animal<\/span> {\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">sound<\/span><span class=\"hljs-params\">()<\/span> {\r\n        System.out.println(<span class=\"hljs-string\">\"Dog barks\"<\/span>);\r\n    }\r\n    \r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">fetch<\/span><span class=\"hljs-params\">()<\/span> {\r\n        System.out.println(<span class=\"hljs-string\">\"Dog fetches\"<\/span>);\r\n    }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">Main<\/span> {\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">main<\/span><span class=\"hljs-params\">(String[] args)<\/span> {\r\n        <span class=\"hljs-type\">Animal<\/span> <span class=\"hljs-variable\">animal<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">Dog<\/span>(); <span class=\"hljs-comment\">\/\/ \u521b\u5efa\u7236\u7c7b\u5f15\u7528\u53d8\u91cf\u6307\u5411\u5b50\u7c7b\u5bf9\u8c61<\/span>\r\n        <span class=\"hljs-type\">Dog<\/span> <span class=\"hljs-variable\">dog<\/span> <span class=\"hljs-operator\">=<\/span> (Dog) animal; <span class=\"hljs-comment\">\/\/ \u5411\u4e0b\u8f6c\u578b\uff0c\u5f3a\u5236\u5c06\u7236\u7c7b\u5f15\u7528\u53d8\u91cf\u8f6c\u6362\u4e3a\u5b50\u7c7b\u5bf9\u8c61<\/span>\r\n        \r\n        dog.fetch(); <span class=\"hljs-comment\">\/\/ \u8c03\u7528\u5b50\u7c7b\u5bf9\u8c61\u7684\u65b9\u6cd5<\/span>\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>The result is:<\/p>\n<pre class=\"post-pre\"><code>Dog fetches\r\n<\/code><\/pre>\n<p>It&#8217;s important to note that there is a risk in downcasting. If the actual object that a parent class reference variable points to is not the type it is being cast to, it can lead to a runtime exception. Therefore, when performing downcasting, it is best to first use the instanceof operator to determine if the reference variable can be cast to the target type in order to avoid runtime exceptions.<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">if<\/span> (animal <span class=\"hljs-keyword\">instanceof<\/span> Dog) {\r\n    <span class=\"hljs-type\">Dog<\/span> <span class=\"hljs-variable\">dog<\/span> <span class=\"hljs-operator\">=<\/span> (Dog) animal;\r\n    dog.fetch();\r\n} <span class=\"hljs-keyword\">else<\/span> {\r\n    System.out.println(<span class=\"hljs-string\">\"Cannot downcast to Dog\"<\/span>);\r\n}\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>In Java, upcasting refers to assigning a subclass object to a superclass reference variable, while downcasting refers to forcibly converting a superclass reference variable to its subclass object. Example of upward transformation: class Animal { public void sound() { System.out.println(&#8220;Animal makes sound&#8221;); } } class Dog extends Animal { public void sound() { System.out.println(&#8220;Dog barks&#8221;); [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[453,1402,299,1404,1403],"class_list":["post-16214","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-development","tag-guide","tag-programming","tag-technology","tag-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to correctly perform upcasting and downcasting in J... - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"Learn about how to correctly perform upcasting and downcasting in java?. Comprehensive guide with examples and best practices.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to correctly perform upcasting and downcasting in J...\" \/>\n<meta property=\"og:description\" content=\"Learn about how to correctly perform upcasting and downcasting in java?. Comprehensive guide with examples and best practices.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-15T12:33:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-07T01:08:47+00:00\" \/>\n<meta name=\"author\" content=\"William Carter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"William Carter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/\"},\"author\":{\"name\":\"William Carter\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0\"},\"headline\":\"How to correctly perform upcasting and downcasting in J&#8230;\",\"datePublished\":\"2024-03-15T12:33:07+00:00\",\"dateModified\":\"2025-08-07T01:08:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/\"},\"wordCount\":124,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"keywords\":[\"Development\",\"guide\",\"programming\",\"technology\",\"tutorial\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/\",\"name\":\"How to correctly perform upcasting and downcasting in J... - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T12:33:07+00:00\",\"dateModified\":\"2025-08-07T01:08:47+00:00\",\"description\":\"Learn about how to correctly perform upcasting and downcasting in java?. Comprehensive guide with examples and best practices.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to correctly perform upcasting and downcasting in J&#8230;\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0\",\"name\":\"William Carter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g\",\"caption\":\"William Carter\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/williamcarter\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to correctly perform upcasting and downcasting in J... - Blog - Silicon Cloud","description":"Learn about how to correctly perform upcasting and downcasting in java?. Comprehensive guide with examples and best practices.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/","og_locale":"en_US","og_type":"article","og_title":"How to correctly perform upcasting and downcasting in J...","og_description":"Learn about how to correctly perform upcasting and downcasting in java?. Comprehensive guide with examples and best practices.","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T12:33:07+00:00","article_modified_time":"2025-08-07T01:08:47+00:00","author":"William Carter","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"William Carter","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/"},"author":{"name":"William Carter","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0"},"headline":"How to correctly perform upcasting and downcasting in J&#8230;","datePublished":"2024-03-15T12:33:07+00:00","dateModified":"2025-08-07T01:08:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/"},"wordCount":124,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"keywords":["Development","guide","programming","technology","tutorial"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/","name":"How to correctly perform upcasting and downcasting in J... - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T12:33:07+00:00","dateModified":"2025-08-07T01:08:47+00:00","description":"Learn about how to correctly perform upcasting and downcasting in java?. Comprehensive guide with examples and best practices.","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-correctly-perform-upcasting-and-downcasting-in-java\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to correctly perform upcasting and downcasting in J&#8230;"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0","name":"William Carter","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g","caption":"William Carter"},"url":"https:\/\/www.silicloud.com\/blog\/author\/williamcarter\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/16214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=16214"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/16214\/revisions"}],"predecessor-version":[{"id":159315,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/16214\/revisions\/159315"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=16214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=16214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=16214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}