转载

Java中父类和子类之间的转换操作示例

本文实例讲述了Java中父类和子类之间的转换操作。分享给大家供大家参考,具体如下:

一、父类引用强转成为子类引用

package learn20180720;

public class People {

 private String name;
 private Integer age;
 private Double height;

 public People(){
 this.name = "";
 this.age = 0 ;
 this.height = 0.0;
 }

 public People(String name, Integer age, Double height) {
 super();
 this.name = name;
 this.age = age;
 this.height = height;
 }

 public String getName() {
 return name;
 }

 public void setName(String name) {
 this.name = name;
 }

 public Integer getAge() {
 return age;
 }

 public void setAge(Integer age) {
 this.age = age;
 }

 public Double getHeight() {
 return height;
 }

 public void setHeight(Double height) {
 this.height = height;
 }

 public void tellObjectName(People p) {
 System.err.println(p.name);
 }

 public void sayInformation() {
 System.err.println("我的名字叫做:"+this.name+"我的年龄是:"+this.age+"我的身高是"+this.height);
 }
}
package learn20180720;
public class Chinese extends People{

 private String country;

 public Chinese(){
 super();
 country = "";
 }

 public Chinese(String aname,Integer aage,Double aheight) {
 super(aname,aage,aheight);
 this.country = "中国";
 }

 public String getCountry() {
 return country;
 }

 public void setCountry(String country) {
 this.country = country;
 }

 public void sayInformation() {
 // TODO Auto-generated method stub
 System.err.println("我的名字叫做:"+this.getName()+"  我的年龄是:"+this.getAge()+"  我的身高是:"+this.getHeight()+"  我的国家是:"+this.country);
 }
}
package learn20180720;
public class TestPeCh {

 public static void main(String[] args) {
 // TODO Auto-generated method stub
 People p1 = new Chinese();

 Chinese c1 = (Chinese)p1;

 }
}

可以看到,p1无法访问子类中的特有的方法(父类引用可以访问子类中重写父类中的方法),但是强转成为子类类型的引用c1之后,c1就可以访问子类中所有的方法啦。

二、父类不可以强转成为子类

package learn20180720;
public class TestPeCh {

 public static void main(String[] args) {
 // TODO Auto-generated method stub
 People p1 = new People();

 Chinese c1 = (Chinese)p1;

 }
}

报错了!

更多关于java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

时间:2020-05-13

Java中子类调用父类构造方法的问题分析

在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的? 答案如下:    当你new一个子类对象的时候,必须首先要new一个父类的对像出来,这个父类对象位于子类对象的内部,所以说,子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况.构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出来,那么肯定要调用其构造方法,所以: 第一个规则:子类的构造过程中,必须调用其父类的构造方

Java中父类怎么调用子类的方法

父类能调用子类的方法吗? 答:能. 怎么做? 把子类传递到父类的有参构造中,然后调用. 使用反射的方式调用,你使用了反射还有谁不能调用的?! 父类调用子类的静态方法. 案例展示: package com.ywq; public class Test2{ public static void main(String[] args) { Son son = new Son(); Father father=new Father(son); father.fun1(); father.fun4();

Java编程子类能否重写父类的静态方法探索

今天突然讨论到了子类继承父类的静态方法问题,有人坚持说能写,有人说不能重写,那到底能不能冲写呢?这个问题很简单,测试一下就完了. 先是父类代码: public class Fu { public static void show() { System.out.println("父类的静态方法"); } public void method() { System.out.println("父类的一般方法"); } } 下面是子类代码: public class Zi

java子类调用父类的方法中包含子类重写的实例方法

# 看题目是不是很绕,这个我也不知道怎么才能更简单的表达了 # 先看代码: public class Common { public static void main(String[] args) { Sub sub = new Sub(); sub.testSub(); } } class Parent { protected boolean test() { throw new RuntimeException(); } protected void testParent() { if (t

java子类继承父类实例-披萨的选择实现代码

编写程序实现比萨制作.需求说明编写程序,接收用户输入的信息,选择需要制作的比萨.可供选择的比萨有:培根比萨和海鲜比萨. 实现思路及关键代码 1)分析培根比萨和海鲜比萨 2)定义比萨类 3)属性:名称.价格.大小 4)方法:展示 5)定义培根比萨和海鲜比萨继承自比萨类 6)定义比萨工厂类,根据输入信息产生具体的比萨对象 Pizza.java package zuoye; import java.util.Scanner; //父类 public class Pizza { String name;

java父类和子类初始化顺序的深入理解

继承类的构建过程是向外扩散的,子类初始化了,父类一定也初始化了 复制代码 代码如下: class Art{ Art(){  System.out.println("Art"); }}class Drawing extends Art{ Drawing(){  System.out.println("Drawing"); }}public class Cartoon extends Drawing { Cartoon(){  System.out.println(&q

java判断class子类或父类的实例方法

我们首先看代码: Class c = ArrayList.class; c.isPrimitive(); //判断c是否为基本数据类型 c.isAssignableFrom(List.class); //判断c是否是List类的子类或父类 c.getGenericType(); //得到泛型类型 实例:通过反射得到List<T> 集合中的泛型类型 package com.zf.target; import java.lang.reflect.Field; import java.lang.re

Java编程关于子类重写父类方法问题的理解

子类重新实现父类的方法称重写:重写时可以修改访问权限修饰符和返回值,方法名和参数类型及个数都不可以修改:仅当返回值为类类型时,重写的方法才可以修改返回值类型,且必须是父类方法返回值的子类:要么就不修改,与父类返回值类型相同.那么,该如何理解呢?为什么要是父类返回值类型的子类? 提出问题:子类必须重写父类所有方法吗? Java,子类不是必须重写父类所有方法的,分为以下两种情况: 父类方法为抽象方法时,子类必须重写(实现)所有父类的抽象方法: 父类方法为普通方法时,子类可以重写父类方法,也可以不重写

Java中关于子类覆盖父类的抛出异常问题

Java中子类覆盖父类方法抛出异常不能比父类多,这个表述不够准确. 准确一点的描述为: 子类抛出的异常类型不能比父类抛出的异常类型更宽泛.假设父类抛出异常ParentException,另外有两个子类继承自ParentException分别为ChildException1, ChildException2, 那么 子类可以同时抛出异常ChildException1,ChildException2. 满足"子类抛出的异常类型不能比父类抛出的异常类型更宽泛",这一条件. 注意: 子类也可以

java中子类继承父类,程序运行顺序的深入分析

我们经常在项目中使用继承,但是往往不太明白,程序运行的顺序以及原理,尤其是使用上转型对象的时候,以及父类子类中都有static变量和方法时,不知道先运行谁.我也是写了一个例子.总结了一下. 复制代码 代码如下: 父类:public class TestStatic { public static String name="china"; {       System.out.println("========方法体========");    } static{  

浅谈Java中父类与子类的加载顺序详解

复制代码 代码如下: class Parent {    // 静态变量    public static String p_StaticField = "父类--静态变量";    // 变量(其实这用对象更好能体同这一点,如专门写一个类的实例)     //如果这个变量放在初始化块的后面,是会报错的,因为你根本没有被初始化    public String p_Field = "父类--变量";    // 静态初始化块    static {        S

浅谈MySQL中授权(grant)和撤销授权(revoke)用法详解

MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利 grant select on testdb.* to common_user@'%' grant insert on testdb.* to common_user@'%' grant update on testdb.* to common_user@'%' grant delete on testdb.* to c

JavaWeb中web.xml初始化加载顺序详解

需求说明 做项目时,为了省事,起初把初始化的配置都放在每个类中 static加载,初始化配置一多,就想把它给整理一下,这里使用servlet中的init方法初始化. web.xml说明 首先了解下web.xml中元素的加载顺序: 启动web项目后,web容器首先回去找web.xml文件,读取这个文件 容器会创建一个 ServletContext ( servlet 上下文),整个 web 项目的所有部分都将共享这个上下文 容器将 转换为键值对,并交给 servletContext 容器创建 中的

浅谈java中OO的概念和设计原则(必看)

一.OO(面向对象)的设计基础 面向对象(OO):就是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识.理解.刻划客观世界和设计.构建相应的软件系统.面向对象的特征:虽然各种面向对象编程语言相互有别,但都能看到它们对面向对象基本特征的支持, 即 "抽象.封装.继承.多态" : – 抽象,先不考虑细节 – 封装,隐藏内部实现 – 继承,复用现有代码 – 多态,改写对象行为 面向对象设计模式:是"好的面向对象设计",所谓"

浅谈Java中各种修饰符与访问修饰符的说明

JAVA中的类只能是public 或者package的.这是符合逻辑的:人们定义类的初衷就是为了让别人用的.倘若是private,别人怎么调用?但是有一个内部类可以被定义为private.严格上说,内部类,算不得上是一种光明正大的类,内部类在某种意义上是类这个王国里的特务和地下工作者.特务和地下工作者为王国起了不少作用,但是几乎从来不敢在公众场合抛投露面.就算要露面,也要在主人(class)的同意下,向导(Interface)的引导下,才敢战战兢兢的走出来.下面是常规的一些类的修饰符和访问修饰符

浅谈java中六大时间类的使用和区别

Java中父类和子类之间的转换操作示例

java.util.Date java.sql.Date java.sql.Time java.sql.Timestamp java.text.SimpleDateFormat java.util.Calendar java.util.Date日期格式为:年月日时分秒 java.sql.Date日期格式为:年月日 java.sql.Time日期格式为:时分秒 java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒) 从数据库中取出来的日期一般都用getTimestamp()方法

浅谈Java中的class类

Java中父类和子类之间的转换操作示例

Class 类是在Java语言中定义一个特定类的实现.一个类的定义包含成员变量,成员方法,还有这个类实现的接口,以及这个类的父类.Class类的对象用于表示当前运行的 Java 应用程序中的类和接口. 比如:每个数组均属于一个 Class 类对象,所有具有相同元素类型和维数的数组共享一个Class 对象.基本的 Java 类型(boolean, byte, char, short,int, long, float 和 double) 和 void 类型也可表示为 Class 对象. 以下示例使用

浅谈Java中对类的主动引用和被动引用

本文研究的主要是Java中类的主动引用和被动引用,具体介绍如下. 主动引用,这里介绍的是主动引用的五种场景 1.遇到new,getstatic,putstatic,invokestatic这4条字节码指令时,类如果没初始化就会被初始化,创建对象,读取或设置静态字段,调用静态方法. 2.反射 3.子类初始化前会先初始化父类 4.包含main方法的类,虚拟机启动时会先初始化该类 5.使用jdk的动态语言支持时(不明) 被动引用: class SuperClass{ static{ syso("sup

浅谈Java中的final关键字与C#中的const, readonly关键字

在编程语言中都有某种方式,告知编译器一块数据是恒定不变的.有两个需求 1. 一个永不改变的编译器常量 2. 一个在运行时被初始化的值,而这个值不会被改变 在Java中,使用final修饰变量实现这两个需求 <pre name="code" class="java">//编译器常量 private final int valueOne = 9; private static final int VALUE_TWO = 99; public static f

浅谈Java中的重载,重写,多态,静态绑定、动态绑定

本文主要研究的是关于Java中重载,重写,多态,静态绑定.动态绑定的相关内容,具体如下. 重载,英文名是overload,是指在一个类中定义了一个以上具有相同名称的方法,这些方法的参数个数.参数类型和顺序不能相同.返回类型可以相同,也可以不同. public class TstaticOverload { static int height; TstaticOverload() { System.out.println ("Planting a seedling"); height =

原文  https://www.zhangshengrong.com/p/KWa35zywXo/
正文到此结束
Loading...