一、基础概念

  多态

    重点是对象的多态性。某一事物的多种体现形态。

  多态的作用:

    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面向对象之多态(向上、向下转型) 入门实例的更多相关文章

  1. java 多态 向上 向下转型

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

  2. Java多态之向下转型

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

  3. 重写 final关键字 多态调用子类特有的属性及行为(向上向下转型)

    1.override 重写:在继承中,子类与父类方法名相同,参数列表相同,的方法叫重写,与返回值有关;  主要应用于系统升级. 2.final 关键字: 可修饰:1.类-->被修饰后该类不能被继 ...

  4. Java面向对象之多态(来源于身边的案例)

    2019年1月3日 星期四 Java面向对象之多态(来源于身边的案例) 1. 为什么要用多态? 1.1 多态是面向对象的三大特性之一 1.2 多态是基于接口设计的模型 1.3 多态具有横向扩展特性 1 ...

  5. Object类 任何类都是object类的子类 用object对象接收数组 object类的向上向下转型

    任何类都是object类的子类 用object对象接收数组 object类的向上向下转型

  6. java基础值向上向下转型

    1.父类引用可以指向子类对象,子类引用不能指向父类对象. 2.向上转型:子类引用的对象转换为父类类型称为向上转型,把子类对象直接赋给父类引用叫upcasting,向上转型不用强制转型(类似于低精度赋给 ...

  7. Java面向对象的多态

    Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...

  8. java面向对象之 多态 Polymorphism

    多态(Polymorphism):用我们通俗易懂的话来说就是子类就是父类(猫是动物,学生也是人),因此多态的意思就是:父类型的引用可以指向子类的对象. 1.多态的含义:一种类型,呈现出多种状态 主要讨 ...

  9. Java 面向对象_多态

    多态图解 代码中体现多态性 父类名称 对象名 = new 子类名称(); or 接口名称 对象名 = new 实现类名称(); // 父类 public class Father { public v ...

随机推荐

  1. 每天一个Linux命令 - 【chkconfig】

    [命令]:chkonconfig [语法]:chkconfig [选项] [功能介绍]:chkconfig 命令是Redhat兼容的Linux发行版中的系统服务管理工具,它可以查询和更新不同的运行等一 ...

  2. Linux下安装配置MySQL5.7服务器

    Linux下安装配置MySQL服务器 一.安装环境 ============ OS:centos6.8 MySQL:mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz ...

  3. 详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化

    在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能.本文通过一个简单的例子详解这两个函数的作用. 1. ...

  4. 【poj1679】The Unique MST

    [题目大意] 共T组数据,对于每组数据,给你一个n个点,m条边的图,设图的最小生成树为MST,次小生成树为ans,若MST=ans,输出Not Unique!,否则输出MST [题解] 很明确,先求M ...

  5. EF添加和修改

    (1)//添加操作 public bool addDate() { try { //声明上下文 a_context = new AEntities(); //声明数据模型实体 //执行代码时候会先验证 ...

  6. opennebula 镜像池

    { "IMAGE_POOL": { "IMAGE": [ { ", ", ", "TEMPLATE": { & ...

  7. 数据库 MySQL 之 数据操作

    数据库 MySQL 之 数据操作 一.MySQL数据类型介绍 MySQL支持多种类型,大致可以分为四类:数值.字符串类型.日期/时间和其他类型. ①二进制类型 bit[(M)] 二进制位(101001 ...

  8. File类中的list()和listFiles()方法

    list()方法是返回某个目录下的所有文件和目录的文件名,返回的是String数组 listFiles()方法是返回某个目录下所有文件和目录的绝对路径,返回的是File数组 public class  ...

  9. java发送post 的json请求

    package com.elink.estos.mq.mqmanager; import java.io.IOException; import java.io.InputStream; import ...

  10. jqGrid查询案例(实用)

    var ThisTime = getNowFormatDate(); //加载表格 function GetGrid() { var selectedRowIndex = 0; var $gridTa ...