java面向对象(多态)
来源:互联网 发布:相马光子 知乎 编辑:程序博客网 时间:2024/05/01 07:29
多态:可以理解为事物存在的多中体现形态。
人:男人,女人,
动物:猫,狗。
猫 x = new 猫();
动物 x = new 猫();
1,多态的体现。
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类的对象。
2,多态的前提。
必须是是类与类之间有关系,要么继承,要么实现。
通常还是有一个前提:存在覆盖。
3,多态的好处。
多态的出现大大的提高程序的扩展性。
4,多态的弊端:
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
abstract class Animal{ abstract void eat();}class Cat extends Animal{ public void eat() { System.out.println("吃鱼"); } public void catchMouse() { System.out.println("抓老鼠"); }}class Dog extends Animal{ public void eat() { System.out.println("吃骨头"); } public void kanjia() { System.out.println("看家"); }}class DuoTaiDemo{ public static void main(String[] args) { /* //Cat c = new Cat(); //c.eat(); //Dog d = new Dog(); //d.eat(); Cat c = new Cat(); Cat c1 = new Cat(); funcation(c1); funcation(new Dog()); } public static void funcation(Cat c) { c.eat(); } public static void function(Dog d) { d.eat(); } */ public static void funcation(Animal a) { a.eat(); } funcation(new Cat()); funcation(new Dog());}
多态的转型:
abstract class Animal{ abstract void eat();}class Cat extends Animal{ public void eat() { System.out.println("吃鱼"); } public void catchMouse() { System.out.println("抓老鼠"); }}class Dog extends Animal{ public void eat() { System.out.println("吃骨头"); } public void kanjia() { System.out.println("看家"); }}class DuoTaiDemo2{ public static void main(String[] args) { Animal a = new Cat();//类型提升。向上转型。 a.eat(); //如果想要调用猫的特有方法时,如何操作? //强制将父类的引用,转成子类类型,向下转型。 Cat c = (Cat)a; c.catchMouse(); //千万不要出现这样的操作。就是将父类对象转成子类类型。 //我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换. //多态自始至终都是子类对象在做着变化。 //Animal a = new Animal(); //Cat c = (Cat)a; function(new Dog()); } public static void function(Animal a) { a.eat(); //instanceof:引用数据类型判断是否是所属类型. if(a instanceof Cat) { Cat c = (Cat)a; c.catchMouse(); } else if(a instanceof Dog) { Dog c = (Dog)a; c.kanjia(); } }}
多态的成员特点:
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调
用的方法。如果有,编译通过,如果没有,编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
在多态中,静态成员函数的特点:
无论编译和运行。都参考做左边。
class Fu{ void method1() { System.out.println("fu method_1"); }}class Zi extends Fu{ void method2() { System.out.println("zi method_2"); } void method3() { System.out.println("zi method_3"); }}class DuoTaiDemo4{ public static void main(String[] args) { Fu f = new Zi(); z.method1(); z.method2(); //z.method3();当调用这个方法时,编译失败. //Zi z = new Zi(); //z.method1(); //z.method2(); //z.method3(); }}
0 0
- java面向对象(多态)
- java面向对象-多态
- java 面向对象 多态
- Java面向对象 ----多态
- JAVA面向对象-----多态
- Java面向对象 多态
- java面向对象/多态
- Java 面向对象 多态
- 黑马程序员-java面向对象(多态)
- java基础-面向对象(继承、多态)
- Java面向对象(封装、继承、多态)
- Java Se----面向对象(多态)
- Java面向对象(三) 多态
- Java面向对象总结(多态)
- Java面向对象_多态
- java笔记-面向对象-多态
- Java面向对象--多态、异常
- #4JAVA面向对象-多态#
- Android Graphic :OpenGL|ES
- 判断一段字符中是否含有中文
- Visual Studio 调试卡顿的解决方法
- Hduoj2816【字符串】【水题】
- 贴代码
- java面向对象(多态)
- 《大话数据结构》第9章 排序 9.4 简单选择排序
- Matlab---变量
- XCode调试技巧–设置全局断点快速定位问题代码所在行
- Android 内存分析工具LogCat GC
- 图文详解YUV数据格式
- 如何把GIT仓库的子目录独立成新仓库
- 程序员如何保持健康
- 不用中间变量交换两个数的值