多态
来源:互联网 发布:必修3基本算法语句ppt 编辑:程序博客网 时间:2024/06/07 17:52
源代码:
class BaseClass{ public int book=6; public void base(){ System.out.println("父类的普通方法"); } public void test(){ System.out.println("父类的被覆盖的方法"); }}public class Java3 extends BaseClass{ public String book="疯狂java讲义"; public void test(){ System.out.println("子类的覆盖父类的方法"); } public void sub(){ System.out.println("子类的普通方法"); } public static void main(String[] args) { BaseClass ac=new Java3(); System.out.println(ac.book);//父类的 ac.base(); ac.test();//子类的 //ac.sub(); //上面的语句是非法的,因为sub方法不是编译时类型BaseClass中的方法 } }
1.java引用变量有两种类型,一种是编译时类型另外一种是运行时类型,当编译时类型和运行时类型不一致时就可能会发生所谓的多态;
2.当一个子类对象直接赋给父类引用变量时,例如BaseClass ac=new SubClass;(SubClass是BaseClass的子类)ac的编译时类型是BaseClass,ac的运行时类型是SubClass,当运行是调用该引用变量的方法时,其方法总是表现出子类方法的行为特征,而不是父类方法的行为特征,这就可能出现:相同类型的变量、调用同一个方法呈现出多种不同的行为特征,这就是多态;
3.只能调用编译时类型的方法,不能调用运行时类型的方法;
4.调用方法只能调用父类中的方法,假使子类中有方法的重写,则执行的形式时子类中重写的形式;调用实例变量则是按照父类中定义和初始化的形式,忽略子类中的初始化;(方法是按照运行时类型来执行的)
5.当运行时类型和编译时类型不相同时,只能存在这样的情况:运行时类型所表示的类时编译时类型所表示类的子类;
6.因为子类是一个特殊的父类,因此java允许把一个子类对象直接赋给一个父类引用变量,无须任何类型转换,或者是被称为向上转型,向上转型有系统自动完成;
7.方法具有多态性,而实例变量不具有多态性;
8.通过引用变量来访问其保护的实例变量时,系统总是试图访问它编译时类型所定义的成员变量,而不是它运行时类型所定义的成员变量;
0 0
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- Umeng的手动的去刷新更新
- mock网站
- MyBatis入门经典
- 动态规划算法实例三则
- 分类器性能评估之ROC和AUC(2)
- 多态
- ubuntu14.04解决安装scipy时出现的“no lapack/blas sources found”问题-wd
- 并查集应用总结
- POJ 2993 2996 象棋
- hdu 2058 The sum problem
- PID,UID,sharedUserId以及Android开启多进程模式
- Cordova 6.1 + ionic 安装和配置
- 前端资料小备份
- CI框架切换语言包