Java-多态
来源:互联网 发布:svn迁移到linux 编辑:程序博客网 时间:2024/06/04 19:24
今天再看Java的多态,多了好久终于有点明白了,记录一下自己的理解
首先要说的是Java的继承,子类继承父类,拥有父类的方法,所以有时说子类是一种特殊的父类,下面来实现两个类
//实现父类public class BaseClass { public int book = 6;//父类book public void base() { System.out.println("Parent Method"); } public void test() { System.out.println("Overrid Parent"); }}//实现子类public class SubClass extends BaseClass { public String book = "Java EE";//子类book public void test() { System.out.println("Sub Overrid Class"); } public void sub() { System.out.println("Sub Method"); }}
然后我们来测试一下
public class PolyTest { public static void main(String[] args) { // TODO Auto-generated method stub BaseClass bClass = new BaseClass(); System.out.println(bClass.book); bClass.base(); bClass.test(); }}
我们编译类型和运行类型是一样的,所以输出的结果是我们预料的结果。
6Parent MethodOverrid Parent
但是如果我们这样定义一个
BaseClass ploy = new SubClass(); System.out.println(ploy.book); ploy.base(); ploy.test(); //ploy.sub();不能调用这个方法
输出结果是下面
6Parent MethodSub Overrid Class
子类是一种特殊的父类,当我们将子类类型赋给父类类型是,我们不需要强制转换,或者说系统自动完成了转换。此时ploy的编译类型是BaseClass,但是运行类型是SubClass。意思就是说我们调用方法时只能调用BaseClass中的方法,但是在运行过程中(当你点击了Run)调用的却是SubClass中的方法,例如,我们调用test();方法时,输出的是“Sub Overrid Class
”。然而当我们要调用sub()方法时,就会报错,尽管可以通过某种方式来调用,但是不能直接调用,因为ploy的类型时BaseClass。ploy和bClass 的编译类型一样,但是调用test()方法时输入的不一样,也就是说,相同类型的变量,调用通过一个方法是呈现出多种不同的行为特征,这就是多态。
与方法不同的是,对象的实例变量则不具备多态性,我们看到book输出的是BaseClass里的实例变量。
引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行至则执行他运行时类型的方法,因此,引用变量只能调用生命该变量是所用类里
包含的方法。
0 0
- Java学习 java -- 多态
- java多态
- java多态
- java多态
- java多态
- Java多态
- java多态
- JAVA@多态
- Java多态
- java 多态
- Java多态
- java多态
- [Java] 多态
- JAVA多态
- Java多态
- java多态
- java 多态
- java多态
- 项目中用到的bluetooth4.0协议的定制
- 关于内存泄露问题
- Web3D
- NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化
- Android中的网络管理源码分析--netd
- Java-多态
- windows下php redis扩展安装
- LVS_keepalived
- POJ 1511 - Invitation Cards
- eclipse与android studio同时操作一个项目
- 《编写高质量iOS与OS X代码的52个有效方法》笔记
- RSA加密介绍
- java之字符串
- ubuntu运行android studio出错unable to run mksdcard sdk