Java面向对象之多态(向上、向下转型) 入门实例
一、基础概念
多态:
重点是对象的多态性。某一事物的多种体现形态。
多态的作用:
1.提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行。
2.不能使用子类特有的功能。只能使用覆盖父类的功能。
多态的前提:
1.必须要有继承关系或者实现关系。
2.通常对方法进行重写、覆盖。
3.父类或者接口要引用指向子类对象。
多态向上转型:
1.提高程序的扩展性,隐藏了具体子类型
2.只能使用父类中的功能,不能使用子类特有的功能。功能被限定了。
多态向下转型:
1.可以使用子类型的特有功能。
2.必须面对具体的子类型。
3.为了避免运行时出现ClassCastException 问题,需要用关键字instanceof来进行判断。
注意:
多态至始至终都是子类对象在做着类型的变化。
二、代码实例
//父类Animal
abstract class Animal
{
abstract void eat();
abstract void sleep();
} //Dog类继承Animal类
class Dog extends Animal
{
/**
将Animal类中的方法重写
*/
void eat()
{
System.out.println("dog eat 吃骨头");
}
void sleep()
{
System.out.println("dog sleep .....");
} /**
自己特有的方法
*/
void say()
{
System.out.println("dog say .....");
}
} //Cat类继承Animal类
class Cat extends Animal
{
/**
将Animal类中的方法重写
*/
void eat()
{
System.out.println("Cat eat 吃鱼");
}
void sleep()
{
System.out.println("Cat sleep .....");
}
} class DuoTaiDemo
{
//封装Dog类的方法
public static void method(Dog d)
{
d.eat();
d.sleep();
d.say();
} //封装Cat类的方法
public static void method(Cat c)
{
c.eat();
c.sleep();
} //封装父类Animal的方法
public static void method(Animal s)
{
s.eat();
s.sleep();
} public static void main(String[] args)
{
Dog d1 = new Dog();
method(d1); Cat c = new Cat();
method(c); Animal s = new Dog(); //多态性,向上转型,将Dog提升为Animal。
method(s); //只能使用覆盖了父类Animal的eat方法和sleep方法。不能使用Dog类中自己的say方法。 Animal a = new Cat(); //多态性,向上转型。
method(a); /**
向下转型,为了避免运行时出现ClassCastException 问题,
需要用关键字instanceof来进行判断。
*/
if( !(s instanceof Dog))
{
System.out.println("类型不匹配");
return ;
}
Dog d2 = (Dog)s; //多态性,向下转型。
d2.eat();
d2.sleep();
d2.say();
}
}
三、运行代码

Java面向对象之多态(向上、向下转型) 入门实例的更多相关文章
- java 多态 向上 向下转型
向上转型 将子类对象当作父类对象 子类对象------>父类对象 先实例化子类 父类 父类对象 = 子类实例 package test2; class Father{ public vo ...
- Java多态之向下转型
目录 Java多态之向下转型 强制类型转换 instanceof Java多态之向下转型 往期回顾:我们学习了向上转型和动态绑定的概念,可以知道在继承关系中,将一个子类对象赋值给父类的引用变量,调用父 ...
- 重写 final关键字 多态调用子类特有的属性及行为(向上向下转型)
1.override 重写:在继承中,子类与父类方法名相同,参数列表相同,的方法叫重写,与返回值有关; 主要应用于系统升级. 2.final 关键字: 可修饰:1.类-->被修饰后该类不能被继 ...
- Java面向对象之多态(来源于身边的案例)
2019年1月3日 星期四 Java面向对象之多态(来源于身边的案例) 1. 为什么要用多态? 1.1 多态是面向对象的三大特性之一 1.2 多态是基于接口设计的模型 1.3 多态具有横向扩展特性 1 ...
- Object类 任何类都是object类的子类 用object对象接收数组 object类的向上向下转型
任何类都是object类的子类 用object对象接收数组 object类的向上向下转型
- java基础值向上向下转型
1.父类引用可以指向子类对象,子类引用不能指向父类对象. 2.向上转型:子类引用的对象转换为父类类型称为向上转型,把子类对象直接赋给父类引用叫upcasting,向上转型不用强制转型(类似于低精度赋给 ...
- Java面向对象的多态
Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...
- java面向对象之 多态 Polymorphism
多态(Polymorphism):用我们通俗易懂的话来说就是子类就是父类(猫是动物,学生也是人),因此多态的意思就是:父类型的引用可以指向子类的对象. 1.多态的含义:一种类型,呈现出多种状态 主要讨 ...
- Java 面向对象_多态
多态图解 代码中体现多态性 父类名称 对象名 = new 子类名称(); or 接口名称 对象名 = new 实现类名称(); // 父类 public class Father { public v ...
随机推荐
- 委托小结及Func用法
首先,委托是一种类型,由关键字delegate声明.确切的说,委托是一种可用于封装命名或者匿名方法的引用类型. 它类似于 C++ 中的函数指针,而且是类型安全和可靠的. 委托类型的声明与 ...
- Oracle11gR2--静默安装数据库软件
1.安装相关的包(略) 2.建oracle用户 组 groupadd oinstall --$ORACLE HOME/rdbms/lib/config.c groupadd dba chattr -i ...
- js点击按钮获取验证码倒计时
//发送验证码倒计时 var clock = ''; var nums = 60; var btn; $("#btnGetVerCode").click(function () { ...
- 用gdb+nm调试php c extension程序
.so写好了是给php脚本调用的,如果php脚本执行崩掉了,.so也只能在进程中饮恨而终,这时候php脚本调试经常用的echo, print_r, var_dump都派不上用场了.即使能打印一点儿错误 ...
- PHP配置数据库XML文件
<?php $doc=new DOMDocument('1.0','utf-8'); //new一个dom对象 $doc->load("config.xml"); 加载 ...
- 用插件NPOI读写excel
1.用插件NPOIusing NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using NPOI.HSSF.UserModel; public class E ...
- linux 软链接 硬链接
查看文件sun.txt 加上参数i 是显示节点 inode [root@bogon test]# ls -li sun.txt 10006225 -rw-r--r--. 1 root root 0 ...
- Linux oprofile命令
一.简介 oProfile是Linux平台上的一个功能强大的性能分析工具,支持两种采样(sampling)方式:基于事件的采样(eventbased)和基于时间的采样(timebased),它可以工作 ...
- 用TCGA数据库分析癌症和癌旁组织的表达差异
上周收到一条求助信息:“如何用TCGA数据库分析LINC00152在卵巢癌与正常组织的的表达差异?” 所以以这个题目为记录分析过程如下: 一.下载数据 a)进入网站https://cancergeno ...
- Django框架 之 Form表单和Ajax上传文件
Django框架 之 Form表单和Ajax上传文件 浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html 1 2 3 4 5 6 7 <h3& ...