多态的基础知识总结
2016-05-04 23:03
232 查看
多态 1.什么是多态 简单的说可以理解为某一类事物的多种存在形态。 举个例子说一下吧: class Animal{ String color; public void eat(){ System.out.println("吃东西") } } class Dog extends Animal{ public void eat(){ System.out.println("边汪汪的叫,边吃东西")//重写 , //当子类不想用父类中继承的eat() 方法,这时候可以重写eat()方法 } } 比如说有一个Animal类,一个Dog类,Dog类继承了Animal类,现在我们可 以从两个方面来看Dog,即 可以把它当做Dog,也可以把它当做Animal,所以说现在Dog类可以有两种存在形式 ; 2、对象多态的前提(要记住) A:类与类(或接口)要有继承(或实现)关系。 B:一定要有方法的重写。 C:一定要有父类或者接口的引用指向子类的对象。(Animal a=new Dog ) 3、多态思想:可以指挥同一类型的一批对象做事情。 多态的出现让我们复杂的问题简单化了。 4、多态中成员的特点: A:成员变量:编译和运行都看父类。 B:非静态方法:编译看父类,运行看子类。(重点,今天考试考到好几 个) 比如:Animal a=new Dog; a.eat(); 这句代码编译的时候首先看父类有没有eat()方法,如 果有这个方法,编译可以通过,如果没有,编译不会通过 运行的时候看子类Dog有没有eat()方法,如果子类有 eat()方法,输出的是子类中的eat()方法,如果没有输出父类Animal 中的eat()方法; 为了更好的说明这一点我就举个今天考的例子吧 class Base{ void test( ){ System.out.println(“Base.test()”); } } public class Child extends Base{ void test(){ System.out.println(“Child.test()”); } public static void main(String[] a){ Child child=new Child(); Base base=new Child(); base.test(); } } 分析:题目中有两个类,分别是Base类和Child类,并且Child继承了Base 类,并且重写了父类的text()方法 Child child=new Child();创建子类对象 Base base=new Child(); 创建子类对象,赋给父类引用型变 量base,满足了多态的三个前提:1.有继承关系;2、子类重写了父类中 的方法;3、父类的引用base 指向子类对象(new Child) base.test() 编译期间看父类中有test()方法,运 行的时候子类中也有test()方法,所以输出结果一目了然了 当然是Child,test() (是不是觉得挺简单的,只要记住这些判断步骤,相信下次遇到多态就不会出错了) C:静态方法:编译和运行都看父类。 补充一点吧:如果子类中有自己的特有方法,如果你想调用特有方法,这 时候你就必须要向下转型了!话不多说还是看一下代码吧 class Animal{ String color; public void eat(){ System.out.println("吃东西") } } class Dog extends Animal{ public void eat(){ System.out.println("边汪汪的叫,边吃东西
“)//重写,
//当子类不想用父类中继承的eat()
方法,这时候可以重写eat()方法
public void yaoRen(){ System.out.println("我可以咬人哦") } } } Animal a=new Dog() 主函数中有这一句 代码,看到我们就想到了多态,现在我们的需求是 想调用Dog中yaoRen()这个方法,并且这个方法是子类Dog特有的方法 我们该如何调用它呢,这时候我们就不能把Dog当做Animal看待了,要把a强行转成Dog所以代码就要写成 Dog g=(Dog)a; g.yaoRen(),输出结果一目了然
相关文章推荐
- JavaScript 详说事件机制之冒泡、捕获、传播、委托
- ImageView的属性android:scaleType作用
- Apache Maven项目提供的EAR插件详解
- 【22】-快速排序随机选择元素的优雅解法
- 【22】-快速排序随机选择元素的优雅解法
- 【22】-快速排序随机选择元素的优雅解法
- Android定时器之Handler的postDelyed方法
- 关于java中文乱码问题,我有话要说。
- android坐标
- Go语言开发环境搭建for Windows
- 作业六:团队项目——编写项目的Spec
- 我是如何学习 Linux 的
- 关于CardView无法显示阴影的问题
- 怎样在iis6 和 iis7 中配置自定义的IHttpHandler类
- XFire创建WebService服务端和客户端
- 新手 山寨的 中国人民共和国国务院的官方网站 只能看不能点^.^
- An internal error occurred during: "Map/Reduce location status updater". java.lang.NullPointerExcept
- Java NIO 完全学习笔记(转)
- HTML5气泡悬浮框(已经加上完整文件)
- hdu1003 最大子串和