Java基础十一--多态
Java基础十一--多态
一、多态定义
简单说:就是一个对象对应着不同类型.
多态在代码中的体现:
父类或者接口的引用指向其子类的对象。
/* 对象的多态性。 class 动物
{} class 猫 extends 动物
{} class 狗 extends 动物
{} 猫 x = new 猫(); 动物 x = new 猫();//一个对象,两种形态。 猫这类事物即具备者猫的形态,又具备着动物的形态。
这就是对象的多态性。 简单说:就是一个对象对应着不同类型. 27 多态在代码中的体现:
28 父类或者接口的引用指向其子类的对象。 多态的好处:
提高了代码的扩展性,前期定义的代码可以使用后期的内容。 多态的弊端:
前期定义的内容不能使用(调用)后期子类的特有内容。通过向下转型来解决。 多态的前提:
1,必须有关系,继承,实现。(实现是特殊的继承)
2,要有覆盖。 */ abstract class Animal
{
abstract void eat(); } class Dog extends Animal
{
void eat()
{
System.out.println("啃骨头");
}
void lookHome()
{
System.out.println("看家");
}
} class Cat extends Animal
{
void eat()
{
System.out.println("吃鱼");
}
void catchMouse()
{
System.out.println("抓老鼠");
}
} class Pig extends Animal
{
void eat()
{
System.out.println("饲料");
}
void gongDi()
{
System.out.println("拱地");
}
} class DuoTaiDemo
{
public static void main(String[] args)
{ // Cat c = new Cat();
// c.eat();
// c.catchMouse(); 98 Animal a = new Cat(); //自动类型提升,猫对象提升了动物类型。但是特有功能无法s访问。
99 //作用就是限制对特有功能的访问。
100 //专业讲:向上转型。将子类型隐藏。就不用使用子类的特有方法。 // a.eat(); //如果还想用具体动物猫的特有功能。
//你可以将该对象进行向下转型。
107 // Cat c = (Cat)a;//向下转型的目的是为了使用子类中的特有方法。
// c.eat();
// c.catchMouse(); // 注意:对于转型,自始自终都是子类对象在做着类型的变化。
// Animal a1 = new Dog();
// Cat c1 = (Cat)a1;//ClassCastException /*
Cat c = new Cat(); // Dog d = new Dog(); // c.eat();
method(c);
// method(d);
// method(new Pig());
*/ method(new Dog()); } public static void method(Animal a)//Animal a = new Dog();
{
a.eat();
//解决类型匹配问题的时候,我们就可以判断一下
135 if(a instanceof Cat)//instanceof:用于判断对象的具体类型。只能用于引用数据类型判断
136 // //通常在向下转型前用于健壮性的判断。 {
Cat c = (Cat)a;
c.catchMouse();
}
else if(a instanceof Dog)
{
Dog d = (Dog)a;
d.lookHome();
}
else
{ } }
/*
public static void method(Cat c)
{
c.eat();
}
public static void method(Dog d)
{ }
*/
}
向上转型:父类引用指向子类对象。子类的特有功能无法访问。
向下转型:子类引用指向父类对象。
Animal a = new Cat(); //自动类型提升,猫对象提升了动物类型。但是特有功能无法s访问。
//作用就是限制对特有功能的访问。
//专业讲:向上转型。将子类型隐藏。就不用使用子类的特有方法。 Cat c = (Cat)a;//向下转型的目的是为了使用子类中的特有方法。
在实际应用中,向上转型便于代码扩展(之前写的代码以后能用,只有继承或者实现基类了的),但是要用到子类特有的功能的时候,必须向下转型。
很多时候我们向上转型为Object类,当用到自己特有功能的时候,我们向下转型转回来。
二、多态生活实例
/*
毕老师和毕姥爷的故事。
*/ class 毕姥爷
{
void 讲课()
{
System.out.println("管理");
}
void 钓鱼()
{
System.out.println("钓鱼");
}
} class 毕老师 extends 毕姥爷
{
void 讲课()
{
System.out.println("Java");
}
void 看电影()
{
System.out.println("看电影");
}
} class DuoTaiDemo2
{
public static void main(String[] args)
{ //原来
// 毕老师 x = new 毕老师();
// x.讲课();
// x.看电影();
//多态
毕姥爷 x = new 毕老师();
x.讲课(); //这里讲的是Java的内容,Java把管理学覆盖了
x.钓鱼(); 毕老师 y = (毕老师)x;//ClassCastException
y.看电影(); }
}
Java基础十一--多态的更多相关文章
- Java基础(十一) Stream I/O and Files
Java基础(十一) Stream I/O and Files 1. 流的概念 程序的主要任务是操纵数据.在Java中,把一组有序的数据序列称为流. 依据操作的方向,能够把流分为输入流和输出流两种.程 ...
- Java基础之多态和泛型浅析
Java基础之多态和泛型浅析 一.前言: 楼主看了许多资料后,算是对多态和泛型有了一些浅显的理解,这里做一简单总结 二.什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面 ...
- 【Java基础】多态
首先先来个总结: 什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消 ...
- java基础之 多态
在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP.这也是为什么有人说,使用面向对象语言 ...
- 黑马程序员——JAVA基础之多态与Object
------- android培训.java培训.期待与您交流! ---------- 多态 : 多态定义: 某一类事物的多种存在形态. 多态的体现: 父类的引用指向了自己的子类对象. ...
- Java基础:多态(重载和重写)
转载请注明出处:jiq•钦's technical Blog (1)域与静态方法 记住"仅仅有普通方法的调用是多态的". 而域和静态方法不是:对于域的訪问.在编译期间就已经进行解析 ...
- java基础(十一) 枚举类型
枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...
- java基础14 多态(及关键字:instanceof)
面向对象的三大特征: 1.封装 (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值.或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用) 2.继承 ...
- java基础(多态)_03
一.多态 1.概念:一个对象的多种形态 2.前提: a:必须有继承 b:必须有重写(只有重写才会有意义,没重写语法没错) 3.体现形式: 父类类型 变量名 = new 子类类型(): 4.注意事项: ...
随机推荐
- AHB-Lite简介
AHB总线实现了简单的基于burst的传输,数据总线带宽可配置32-1024bit.可以实现简单的fixed pipeline在address/control phase和 data phase之间. ...
- python3 集合的常用方法
方法 意义 S.add(e) 在集合中添加一个新的元素e:如果元素已经存在,则不添加 S.remove(e) 从集合中删除一个元素,如果元素不存在于集合中,则会产生一个KeyError错误 S.dis ...
- Linux基础命令---rmdir
rmdir 删除一个空目录,可以同时删除途经的父目录,但是要确保父目录中没有其他内容. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. ...
- php ci 报错 Object not found! The requested URL was not found on this server. If you entered the URL manually please check
Object not found! The requested URL was not found on this server. The link on the referring page see ...
- Fine报表权限流程分析记录
Fine报表权限流程分析记录 URL访问三种类型的报表:第一个:BI报表 例如: http://192.25.103.250:37799/WebReport/ReportServer?op=fr_bi ...
- c++中对应java ShutdownHook的退出处理器
最近学习cpp(至于为什么,可参考http://www.cnblogs.com/zhjh256/p/6321972.html),c++标准库第二版5.8.2节的时候,发现c++有一个对应java Sh ...
- spring mvc @ModelAttribute 每次执行requestmapping前自动执行
在不少应用场景中,我们希望在每次执行requestmapping前自动执行一些操作,比如把某些数据(比如数据字典.系统配置.标准错误号,这在企业应用系统中极为常见)塞到model中供view访问,因为 ...
- 微信小程序编写新闻阅读列表
微信小程序编写新闻阅读列表 不忘初心,方得始终:初心易得,始终难守. 本篇学习主要内容 Swiper 组件(轮播图) App.json 里的关于导航栏.标题的配置. Page 页面与应用程序的生命周期 ...
- 20145213《网络对抗》逆向及Bof基础
实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShe ...
- android 实践项目 总结 (修改)
Android手机定位与地图实现 在一个不熟悉的环境中,获得自己的位置,选择合适的就餐地点,住宿和公交路线成为一项难题.本次的实践项目就是为了解决上述难题的,通过调用百度地图的接口实现定位.查询公交路 ...