/*上转型和下转型(对象的多态性)
*上转型:是子类对象由父类引用,格式:parent p=new son
*也就是说,想要上转型的前提必须是有继承关系的两个类。
*在调用方法的时候,上转型对象只能调用父类中有的方法,如果调用子类的方法则会报错
*下转型:是父类向下强制转换到子类对象
*前提是该父类对象必须是经过上转型的对象。
*
*代码示例:*/

 abstract class Parent{
abstract void grow();
}
class Son extends Parent{
void grow(){
System.out.println("我比父亲成长条件好");
}
void dance(){
System.out.println("我会踢球");
}
}
public class test {
public static void main(String[] args) {
//上转型,用父类的引用子类的对象
Parent p=new Son();
//调用父类中有的方法
p.grow();
//p.dance();这里会报错,因为父类中没有dance()方法 //对进行过上转型的对象,进行强制下转型
Son s=(Son)p;
//调用子类中的方法
s.dance();
}
}

/*
* 在我们写程序中,很少会把代码写死,比如说还会有daughter类
* 然后在封装函数来调用对象,说不定会用到子类的方法,这里我们来讲解一下这一方面的知识*/

 abstract class Parent{
abstract void grow();
}
class Son extends Parent{
void grow(){
System.out.println("我比父亲成长条件好一点:son");
}
void play(){
System.out.println("我会踢球");
}
}
class Daughter extends Parent{
void grow(){
System.out.println("我比父亲成长条件好很多:daughter");
}
void dance(){
System.out.println("我会跳舞");
}
}
public class test {
public static void main(String[] args) {
Parent p=new Son();
show(p);
Parent p2=new Daughter();
show(p2);
}
public static void show(Parent p){
//现将父类中有的方法输出
p.grow();
//对进行过上转型的对象进行类型判断,然后进行相应的强制下转型
if(p instanceof Son){
//判断是哪个类的上转型对象,然后进行下转型
Son s=(Son)p;
//调用子类中的方法
s.play();
}else if(p instanceof Daughter){
Daughter d=(Daughter)p;
d.dance();
} }
}

/*
* 在上转型中,编译程序的时候,看父类中有没有对象调用的方法,没有的话,就报错
* 例如:Parent p=new Son();
* p.play();
* play()方法在父类中没有,所以会报错
* 在运行的时候,看子类中是否有调用的方法,有的话,运行子类的方法(重写父类的方法)
*
* */

java上转型和下转型(对象的多态性)的更多相关文章

  1. Java多态之向下转型

    目录 Java多态之向下转型 强制类型转换 instanceof Java多态之向下转型 往期回顾:我们学习了向上转型和动态绑定的概念,可以知道在继承关系中,将一个子类对象赋值给父类的引用变量,调用父 ...

  2. Java学习——上转型与下转型对象

    上转型:重写父类方法才调用子类方法,其他仍用父类的,包括被子类隐藏的父类成员变量,而且不能调用子类新增的成员变量和成员方法. 下转型:只能是转上去的才能转下去.下转型类似于该子类直接继承父类. pac ...

  3. Java上转型和下转型

    Java 转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象. 什么叫父类引用指向子类对象,且听我慢慢道来. 从2个名词开始说起:向上转型(upcasting) .向下转型(downcasti ...

  4. 对象的上转型和下转型 (instanceof关键字)

    1.对象的上转型,就是多态的一种写法 格式:父类名称 对象名 = new 子类名称(): Animal animal = new Cat(); 含义:右侧创建一个子类对象,把它当作父类来使用 向上转型 ...

  5. java 向上,向下转型

    在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转 ...

  6. java 向上转型 向下转型

    //父类 四边形 class Quadrangle{ public static void draw (Quadrangle q){ } } //子类  public class Parallelog ...

  7. java 多态 向上 向下转型

    向上转型 将子类对象当作父类对象     子类对象------>父类对象 先实例化子类 父类 父类对象 = 子类实例 package test2; class Father{ public vo ...

  8. java基础(十)之向上转型/向下转型

    向上转型:将子类的对象赋值给父类的引用. 向下转型:将父类的对象赋值给子类的引用. 向上转型 Student a = new Student(); Person zhang = a; 或者 Perso ...

  9. java中的向下转型

    1.父类对象可以强制转换为子类对象,但是前提是此父类对象为子类对象实例化的结果. e.g. Fruit fruit=new Apple(); Apple a=(Apple)fruit;//ok e.g ...

随机推荐

  1. win10如何合并硬盘分区

    好多人都会讲电脑硬盘分成几个不同的区,以方便自己的资料的存储和查找,但不少人不知道如何合并已经分出的硬盘分区.以下是我的经验,与大家分享: 1.   首先,右击“此电脑”,在弹出来的右键菜单这种选择“ ...

  2. Java 字节流操作

    在java中我们使用输入流来向一个字节序列对象中写入,使用输出流来向输出其内容.C语言中只使用一个File包处理一切文件操作,而在java中却有着60多种流类型,构成了整个流家族.看似庞大的体系结构, ...

  3. ubuntu桌面不显示菜单

    为什么?我也不知道,只记得之前在搜狐看了行尸走肉,然后第二次开机就看不到菜单了. 参照百度结果然后去尝试了一下,记过ok了,我的ubuntu是13.10. 图说: 看到这里就应该大概怎么做了. 1   ...

  4. js手写图片查看器(图片的缩放、旋转、拖拽)

    在做一次代码编辑任务中,要查看图片器.在时间允许的条件下,放弃了已经封装好的图片jq插件,现在自己手写js实现图片的缩放.旋转.推拽功能! 具体代码如下: <!DOCTYPE html> ...

  5. lnmp pathinfo问题

    location / {              if (!-e $request_filename) {              rewrite  ^/(.*)$  /index.php/$1  ...

  6. 【树莓派】Linux 测网速及树莓派源

    这篇文章比较杂,其中包含三点:linux环境中测试网络速度,树莓派下载软件的源,部分我写好的脚本: 一.Linux 测网速 Linux 测网速: sar -n DEV 1 100 1代表一秒统计并显示 ...

  7. JS——函数、事件

    1.函数字符串函数 var s=new string(); var ss="hello world"; var sss=""HELLO, WORLD" ...

  8. React Native 导入原生Xcode项目总结与记录

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  9. DUBBO高级配置:多注册中心配置

    有时候我们需要的服务不在同一个 zookeeper 注册中心上,此时我们需要在 DUBBO 配置文件中配置多个注册中心. 下面我们在之前创建项目的基础上在 provider 模块中增加一个 IBook ...

  10. Java面试题:Servlet是线程安全的吗?

    Servlet不是线程安全的. 要解释为什么Servlet为什么不是线程安全的,需要了解Servlet容器(即Tomcat)使如何响应HTTP请求的. 当Tomcat接收到Client的HTTP请求时 ...