Java中的多态
2016-01-22 17:24
162 查看
public class test { public static void main(String[] args) { Father f = new Son(); System.out.println(f.num); f.print(); } } class Father{ int num=10; public void print(){ System.out.println("Father"); } } class Son extends Father{ int num=20; public void print(){ System.out.println("Son"); } }
多态也叫作动态绑定。
对于成员变量:
编译、运行看的都是父类。
对于非静态的成员方法:
环境执行程序要经过编译、运行;成员方法在编译的时候到父类中找print( ),在运行的时候到子类中找print(
)【编译看的是父类,运行看的是子类】。
对于静态的成员方法:
因为是静态的,相当于是用类名去调用,故编译、运行都看父类的。
并且对于非静态成员方法,如果print( )只存在于子类中,在父类中没有print( )的话,编译的时候就会出错,故不会运行。
父类引用指向子类对象是向上转型
先有向上转型,然后才有向下转型
多态的好处和弊端:
1、好处:提高了代码的维护性(是由继承保证的)
package pro5; public class test { public static void main(String[] args) { //Animal a = new Dog();在实际开发中很少这样用,用下面的方式可以使用子类中的特定属性和行为 meth(new Cat()); meth(new Dog()); } public static void meth(Animal a){ //当作参数的时候用多态最好,因为扩展性强 //关键字instanceof用来判断前边的引用是否和后面的数据类型相等 if(a instanceof Cat){ Cat c1 =(Cat)a; c1.print(); c1.eat(); }else if(a instanceof Dog){ Dog d1 =(Dog) a; d1.print(); d1.eat(); }else{ a.print(); } } } class Animal{ public void print(){ System.out.println("Animal"); } } class Cat extends Animal{ public void print(){ System.out.println("Cat"); } public void eat(){ System.out.println("Cat Eat"); } } class Dog extends Animal{ public void print(){ System.out.println("Dog"); } public void eat(){ System.out.println("Dog Eat"); } }
2、弊端:不能够使用子类特有的属性和行为。
相关文章推荐
- java实现ping功能的几种方法
- Java note
- JSR356标准Java WebSocket
- javascrip笔记——图片加载
- Eclipse常用快捷键
- 深入分析JavaWeb Item1 -- JavaWeb开发入门
- 运行Jmeter.bat出错:Not able to find java executor or version. Please check your installation. errorlevel=2
- main()方法--java
- JavaSE003_String类总结之内存分析
- [Java视频笔记]day04
- JavaSwing 表格JTable内容居中 自定义TableModel
- Java 学习之反射机制“解刨”分解类,并获取内容!
- Java 学习之反射机制“解刨”分解类,并获取内容!
- java中print(this)逻辑
- javamail发信和收信机制(smtp、pop3、imap)
- Java日志记录的5条规则
- ECLIPSE 断点调试
- Java石头剪刀布小游戏代码
- java反序列化漏洞解决方案
- Spring与CXF整合