Java 两大利器 多态和反射
来源:互联网 发布:国培网络研修心得体会 编辑:程序博客网 时间:2024/05/16 19:41
多态: 静态多态性和动态多态性
静态多态性:有两个函数,名称一样,但是系统可以接受,这叫函数重载,(静态多态性)
一个函数呈现多种状态,系统能够根据参数来决定调用谁
三种情况:参数个数不同;参数个数相同,类型不同;个数类型相同,出现的顺序不同
静态是指:虽然函数名只有一个,但是代码要写多个
动态多态性:一般在继承时使用, 不多说,直接上代码:
动态多态性;
例1
package duotail
//动态多台性一般在继承时使用
abstract class Person{
public abstract void printInfo();
}
class Student extends Person{
public void printInfo(){
System.out.println("学生打印");
}
}
class Teacher extends Person{
public void printInfo(){
System.out.println("老师打印")
}
}
public class StudentTest{
public static void print(Person p){
p.printInfo();
}
public static void main(String[] args){
print(new student());
}
}
例2
package duotai;
//模块1调用一个对话框,让对话框显示出来
class Module1{
private Dialog dialog;
public Module1(Dialog dialog){
this.dialog = dialog;
}
public void callDialog(){
dialog.show();
}
}
abstract class Dialog{
public abstract void show();
}
class Dialog1 extends Dialog{
public void show(){
System.out.println("对话框1显示");
}
}
//客户对Dialog不满意,想要自己开发一个Dialog2,被Module1调用,不能改变Module1源代码
class Dialog2 extends Dialog{
public void show(){
System.out.println("对话框2显示");
}
}
public class DialogTest{
public static void main(String[] args){
Dialog dialog = new Dialog();
Module1 module1 = new Module1(dialog);
module1.callDialog();
}
反射:反射机制主要方便配置文件的读入
不多说,直接上代码(有注释)
例1
package fanshe;
class Customer{
private String account;
private String password;
public Customer(){
System.out.println("构造函数1");
}
public Customer(String account, String password){
System.out.println("构造函数2");
this.account = account;
this.password = password;
}
public void printInfo(){
System.out.println("账号:"+account+"密码:"+password);
}
}
public class Test1{
public static void main(String[] args) throws Exception{
String className = "fanshe.Customer";
/*className cus = "fanshe.Customer";
//得到类的信息
calss c = class.forName(className);
//得到里面的构造函数,就可以生成对象
Constructor[] cons = c.getConstructors();
for(int i=0; i<cons.length;i++){
System.out.println("名字"+cons[i].getName());
Class params = cons[i].getParameterTypes();//得到参数类型
for(int j=0;j<params.length;j++){
System.out.println(Params[j].getName());
}
}
//得到里面的成员函数 (包括继承过来的) 就可以调用成员函数
Method mets= c.getMethods();
for(int i=0;i<mets.length;i++){
System.out.println("名字:"+mets[i].getName());
Class[] params= mets[i].getParameterTypes();//得到参数类型
for(int j=0;j<params.length;j++){
System.out.println(params[j].getName());
}
}
}
}
例2
package fanshe;
public class Test2{
public static void main(String[] args)throws Exception{
String className = "fanshe.Customer";
Class c = Class.forName(className);
//c.newInstance();//表示调用不带参数的构造函数
//生成一个对象:用构造函数
Constructor con1 = c.getConstructor(new Class[]{});
//若要传入参数,则如下:
Constructor con1 = c.getConstructor(new Class[]{Class.forName("java.lang.String"),Class.forName("java.lang.String")});
//生成对象
Object obj = con1.newInstance(new Object[]{});
//new Object[]表示不传入参数
//若要传入参数,则如下:
Object obj = con1.newInstance(new Object[]{"1111","2222"});
Method met = c.getMethod("printInfo",new Class[]{});
met.invoke(obj,new Object[]{});//调用
//上述所有与代码相当于:
Customer cus = new Customer("1111","2222");
cus.printInfo();
}
}
- Java 两大利器 多态和反射
- java解析html的两大利器
- 定位MySQL锁和事务问题的两大利器
- 甲骨文大数据两大利器
- 代码走查的两大利器
- 264分析两大利器 和 视频系列下载:264VISA和Elecard StreamEye Tools
- 264分析两大利器:264VISA和Elecard StreamEye Tools
- 软件:264分析两大利器:264VISA和Elecard StreamEye Tools
- 264分析两大利器:264VISA和Elecard StreamEye Tools
- 264分析两大利器:264VISA和Elecard StreamEye Tools
- Windows环境下学习Lisp和Scheme的两大利器
- 264分析两大利器:264VISA和Elecard StreamEye Tools
- Windows环境下学习Lisp和Scheme的两大利器
- 264分析两大利器:264VISA和Elecard StreamEye Tools
- 264分析两大利器:264VISA和Elecard StreamEye Tools
- java反射大汇总
- 浅谈两大交互动画创作利器"Sparkle" 与 "Flash"
- Delphi开发者快速解决问题的两大网络利器
- 面向对象—10—继承、抽象类、模板设计模式
- 常用目录作用
- 云计算起源探析
- hdu 2571 命运
- zoj1824
- Java 两大利器 多态和反射
- MySQL 数据类型 详解
- 文件系统常用命令
- Python 实现的Binary Search 算法以及效率的对比
- 使用expect省去输入ssh密码之苦
- 求质数(C++语言)
- 二进制包安装、查询、卸载
- Longest Consecutive Sequence
- cramfs文件系统移植经念总结