java系统学习(七) --------多态
2015-09-01 18:05
519 查看
多态的产生
程序员在开发过程中,需要在代码中编写很多方法。在具体编写时,有许多方法要实现的功能基本差不多。例如现实开发中可能会出现下列代码:void print1(int x)//带有一个参数的方法 { System.out.println(2*x); } void print2(int x,int y) //带有两个参数的方法 { System.out.println(2*x+y); }上面的例子中,其实两个方法所实现的功能基本一样,只不过参数的形式不同。如果所有的方法都像上面的实例一样,那么整个程序中会出现很多的方法名。对于程序员来说,在调用方法时,会很容易出错。多态可以解决这种情况。
多态的概念
多态就是拥有多种形态。多态主要是指拥有相同的形式,但不同的参数实现不同的功能。一个类可以拥有多个构造函数,这些构造函数使用相同的名称,但是参数类型与个数却不同,这就是多态的一种形式。
使用多态
方法多态一定要遵守两个规则1.方法名称一定要一样。
2.传入的参数类型一定要不一样。
public class student //创建一个学生类 { //创建成员变量 int x; int y; int z; void print(int x) //创建了一个print方法 { System.out.println(2*x); } void print(int x,int y) //创建了一个带两个整型参数的print方法 { System.out.println(2x+Y); } void print(int x, int y, int z)//创建了带3个整型参数的print方法 { System.out.println(2*x+Y*z); }
重载和覆盖的实例对比
重载是多态的一种,它需要遵守方法名一样,传入的参数类型或者个数不一样。而覆盖 是子类对父类方法的覆盖,需要 方法名和 参数类型 个数都一样。
传值引用和传址引用
传值引用主要是针对基本数据类型而言。所谓传值引用就是在进行变量的传递过程中,传递的是变量实际的值,即变量实际值的复制。由于一个变量值不会影响另一个变量值的改变,所以操作后的结果不会影响原来的值。public class test2 { public static void main(String[] args) { int a=10; //创建成员变量a int b=a; //创建成员变量b System.out.println("在重新给a赋值前a的值"+a+" "+"b的值"+b); a=30; //为变量a重新赋值 System.out.println("在重新给a赋值后a的值"+a+" "+"b的值"+b); } }
结果:
在重新给a赋值前a的值 10 b的值是10
在重新给a贼值后a的值 30 b的值是10
从上面的程序段可以看出,.‘a'值的改变并没有对“b”的值产生任何影响,这就是传值引用的特点。
传址引用主要是针对对象操作,它传递的是一个对象句柄的复制。也就形成了多个变量操作一个对象的局面,任何一个针对句柄操作的变量,都会影响到其他的变量。
public class test3 { int x=2; //创建成员变量 public static void main(String[] args) //主方法 { test3 t=new test3(); //创建对象t test3 t1=t; //把对象t赋值给t1 System.out.println("测试前的数据:"); System.out.println("输出两个数据值:"); System.out.println("t.x="+t.x); System.out.println("t1.x="+t1.x); System.out.println("测试后的数据:"); t .x=3; //设置对象t的x变量为3 System.out.println("输出两个数据值:"); System.out.println("t.x="+t.x); System.out.println("t1.x="+t1.x); } }
结果:
测试前的数据:
输出两个数据值
t.x=2;
t1.x=2;
测试后的数据
输出两个数据值
t.x=3;
t1.x=3;
上面的程序段可以看出, "t.x”的值发生变化,"t1.x”的值也紧随着改变,这就是传址引用的特点
绑定
绑定就是对象方法的调用,准确地说,就是对象句柄与方法的绑定。绑定分为静态绑定和动态绑定。静态绑定
当声明一个方法为“private" , "static" , "final" ,或者声明一个构造函数时,编译器清楚地知道是调用哪个方法,不存在与实际类型不匹配的现象,这就称为静态绑定。静态绑定不存在多态的问题。动态绑定
动态绑定只用在程序运行的过程中,其会根据程序传递的参数不同,而调用不同的方法,这种绑定只有在程序运行期间才会发生,即动态绑定有着不确定性。动态绑定存在多态的问题。常见问题
动态和静态编译是什么答:允许对对象进行不同的操作,但具体的操作却取决于对象的类型。 程序在编译的时候,什么函数对哪个对象执行什么操作都已经确定,这就称做静态编译。多态是动态编译,动态编译就是在程序执行的过程中,根据不同对象类型有不同的绑定,其通过一个方法接口,实现多个不同的实现过程。这依赖于编译时编译器对同一个方法不同参数的
识别。
相关文章推荐
- 黑马训练营java学习笔记:集合
- springMVC 的实现
- java死锁样例
- Eclipse 插件开发 向导
- Eclipse 插件开发遇到问题心得总结
- 清除eclipse中svn历史资源位置
- java中HashMap的用法
- Java远程调试
- 【Java】深入理解JVM内存模型
- From Eclipse to intellij idea 14
- java.net.UnknownHostException: sms.chinacomservice.net
- Java 多线程 并发编程
- 全面解析java注解
- java中数组操作的10大方法
- JVM内幕:Java虚拟机详解
- Paho MQTT Java Client Implementation and IoTF service Java Client Implementation
- java学习之String
- eclipse无法创建server
- eclipse的egit插件问题
- java截取字符串,截串,substring和split,分割字母和数字,正则缝隙