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 ...
随机推荐
- Lambda中的常用sql方法
1.Groupby 对集合进行分组,如: var dllList = _menuMan.Load(c => c.TXT_ASSEMBLYNAME != null).GroupBy(c=>c ...
- JAVA,模拟HTTP登录(略有修改) ----转载自http://zhoujingxian.iteye.com/blog/439738
/* * 网上的一个模拟登录或者模拟注册程序 * 2013-8-5 */ package Socket_Http; import java.io.BufferedReader; import java ...
- Python技巧(一)
一 if..else的多种写法 a, b, c = 1, 2, 3 1.常规 if a > b: c = a else: c = b 2.表达式 c = a if a > b else ...
- FFmpeg新版本(2016年10月份以后) 支持硬件解码
FFmpeg provides a subsystem for hardware acceleration. Hardware acceleration allows to use specific ...
- Stars(树状数组单点更新)
Astronomers often examine star maps where stars are represented by points on a plane and each star h ...
- Spring Cloud Eureka 3 (Eureka client注册服务提供者)
在完成服务注册中心的搭建后我们来尝试下将一个既有的spring boot应用加入eureka的服务治理体系中 新建一个spring boot项目加入eureka client依赖 这里加入的eurek ...
- FPGA和CPLD的比较
1 FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现. 2 CPLD更适合触发器有限而乘积丰富的结构,更适合完成复杂的组合逻辑:FPGA更适合于触发器丰富的结构,适合完成时序逻辑. 3 c ...
- solrCloud选举leader的逻辑分析
First call *setup(ElectionContext) to ensure the election process is in it'd. Next calljoinElecti ...
- Python中sort与sorted函数
python中列表的内置函数sort()可以对列表中的元素进行排序,而全局性的sorted()函数则对所有可迭代的序列都是适用的: 并且sort()函数是内置函数,会改变当前对象,而sorted()函 ...
- c语言实践:求两个数的最大公约数
我的思路是这样的:比如12和16这两个数.先理解一下概念,什么叫最大公约数.就是12有很多个因数,16也有很多个因数,这两堆因数中有一些重合的因数,在这些重合的因数中找到那个最大的.那么最大公约数一定 ...