java 多态学习笔记
2015-05-16 17:29
162 查看
多态
java引用变量有两种类型:一种编译时的类型,一种是运行时的类型。编译时的类型由声明该变量时的类型决定,运行时的类型由实际赋该改变量的对象决定。如果编译时类型和运行时类型不一致就说出现所谓的多态。例如下面代码:public class ExtendsTest { public static void main(String [] args){ BaseClass c = new SubClass(); c.test(); //会输出BaseClas类中的str,而不是SubClass中的 System.out.println(c.str); //注释掉了,因为会报编译时错误 //c.sub(); } } class BaseClass{ public String str = "base string"; public void test(){ System.out.println("父类的test()方法"); } } class SubClass extends BaseClass{ public String str = "sub string"; @Override public void test(){ System.out.println("子类的test()方法 "); } public void sub(){} }
上面的事例中BaseClass是编译时类型,而SubClass是运行时类型。当调用c对象的test()方法(SubClass覆盖了BaseClass的test()方法)时实际是调用SubClass中的test(),这就是多态。
子类是一种特殊的父类,因此java允许把一个子类对象直接赋给父类的引用,无需任何上类型转换,由JVM自动帮我们完成。我们可以这样理解多态:把一个子类的实例赋给一个父类的引用,在运行时表现出子类的行为。
上面的事例中注释掉了c.sub(),因为编译时类型是BaseClass,该类中并没有sub().但是在运行时c对象是包含子类对象SubClass sub()的,可以通过反射来调用。例如:Object o = new ArrayList();通过o对象只能调用Object类中的方法,不能调用ArrayList类中的方法。
上述事例还告诉了我们属性是不具备多态性。
相关文章推荐
- JAVA学习笔记之七继承和多态
- 学习Java.对于继承和多态的随堂笔记
- Java_SE_学习笔记_①——Java多态——向上转型的意义
- 黑马程序员:java学习笔记-接口和多态
- Java 编程思想(第四版)学习笔记(8)多态
- java核心技术学习笔记7---继承与多态
- 黑马程序员-java多态学习笔记
- 【Java学习笔记】继承和多态
- Java学习笔记之六——Java类的继承和多态(1)
- Java学习笔记之六——Java类的继承和多态(2)
- Java学习笔记---类的继承与多态特性
- Java学习笔记——类与对象(封装、继承与多态)
- java学习笔记---浅谈java多态的注意要点
- java学习笔记---构造器的多态和调用顺序
- JAVA学习笔记(五)继承时的构造方法、多态、接口、汉诺塔
- 黑马程序员-------java学习笔记之继承与多态
- 【Java学习笔记】基础知识学习10【继承与多态】
- Java菜鸟学习笔记--面向对象篇(十八):对象转型&多态
- Java菜鸟学习笔记--面向对象篇(十八):对象转型&多态
- Java学习笔记——多态