Java学习笔记之多态
2016-01-13 15:46
519 查看
这里简单记三点
多态中的成员函数多态中的成员变量
多态中的静态成员函数
多态中的成员函数的特点:
在编译时期,参照引用类型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有,编译失败在运行时期,参照对象所属的类中是否有调用的方法
简单来讲就是,成员函数在多态调用时,编译看左边,运行看右边。
下面贴代码
[code]/** * @(#)ploymorphic.java * * * @author Praying * @version 1.00 2016/1/13 */ public class ploymorphic { public static void main(String[] args) { Base b=new Derived(); b.method_1(); b.method_2(); b.method_3();//这里会编译失败 } } public class Base { public void method_1(){ System.out.println("Base Method_1"); } public void method_2(){ System.out.println("Base Method_2"); } } public class Derived extends Base { /** *override Base method_1 */ public void method_1(){ System.out.println("Derived Method_1"); } public void method_3(){ System.out.println("Derived Method_3"); } }
下面是编译结果
不难看出,错误信息支出,无法找到method_3方法,是b是Base类的对象,而method_3是在Derived类中定义的。下面我们屏蔽掉b.method_3()这一行,看下运行结果
从图片中不难看出,b.method_1()是调用子类中的method_1()方法,那么b.method_2()呢,当然也是子类中的method_2(),只不过子类没有对其进行重写。下面来看多态中的成员变量。
多态中的成员变量
在多态中,无论编译还是运行,成员变量都参考左边(引用型变量所属的类)下面看一段代码
[code]/** * @(#)polymorphic_02.java * * * @author Praying * @version 1.00 2016/1/13 */ public class polymorphic_02 { public static void main(String[] args) { Base b=new Derived(); System.out.println(b.num); } } class Base{ public int num=4; } class Derived extends Base { public int num=8; }
下面是运行结果
结果是4,也就是输出了Base类中的num.
多态中的静态函数
在多态中,静态成员函数,无论编译和运行都参考左边。[code]/** * @(#)polymorphic_03.java * * * @author Praying * @version 1.00 2016/1/13 */ public class polymorphic_03 { public static void main(String[] args) { Base b=new Derived(); b.method(); } } class Base { public static void method() { System.out.println("Base::method"); } } class Derived extends Base{ public static void method() { System.out.println("Derived::method"); } }
下面是运行结果
无需多言。
相关文章推荐
- Java应用程序中System.out.println输出中文乱码
- java常量使用比较好的方法
- java 数据库连接池比较(c3p0,dbcp和proxool)
- 项目中一些java知识的整理和总结
- Java创建和解析Json数据方法(四)——json-lib包的使用
- Spring Boot初体验
- Java中的private、protected、public和default的区别
- java web工作原理
- JAVA内存处理--堆和栈
- 一步一步理解 Java 企业级应用的可扩展性
- Android 反编译apk + eclipse中调试smali
- 【junit】java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch
- 使用maven编译dubbo,导入eclipse(其他maven开源项目编译类似)
- 一步一步理解 Java 企业级应用的可扩展性
- Java通过文件路径下载文件
- 解决MyEclipse Destroying ProtocolHandler ["ajp-apr-8009"]
- 使用eclipse export导出war,运行报错无法找到类解决办法
- eclipse升级
- java数据类型之间的转换
- Java 8 学习--lambda表达式的月之暗面