多态与反射

-------------静态多态----------
class Custom{
	private String name;
	private String pwd1;
//一个类里可以有名称相同的函数,系统可以接受,这叫做函数重载,(静态多态性)
//一个函数可以程多种状态,系统能够根据参数来决定调用谁
//三种情况:1参数的个类不同,2.参数个类相同,类型不同,3,参数的个数相同,类型相同,顺序要不同
//静态是指:虽然函数名只一个,但是函数名代码得写多个	如Custom(
	public Custom(String name,String pwd2){
		System.out.println("2");
		this.name=name;  //将传入的参数赋值给上面的name;
		this.pwd1=pwd2;
	}
	public Custom(){
		System.out.println("构造函数1");
		
	}
	
	public  String getname(){
		return name;
	}
}
public class Test {
	public static void main(String[] args){ 
   Custom c2=new Custom("amd","123");
   Custom  c=new Custom();
   System.out.println(c2.getname());
   
	}

------------------------------------------------
//动态函数一般在继承上使用
abstract class Porint{
	public abstract void porint();
}
class Student extends Porint{
	
	public  void porint(){
		System.out.println("Student");
	}
}
class Teacher extends Porint{
	public void porint(){
		System.out.print("Teacher");
	}
	
}
public class Test {
	//静态函数的缺陷,要写多个函数,而动态函数只有写一个就可以
	public static void porint(Student p){ //父类的引用可以指向子类对象
		p.porint();
	}
	public static void main(String[] args){ 
		porint(new Student());   //new Student() 输出student
 
   
	}
}

-------------------------
public class Custom {
	private String name;
	private String pwd;
public Custom(){
	System.out.println("构造函数1");
	
}
public Custom(String name,String pwd){
	System.out.println("构造函数2");
	this.name=name;
	this.pwd=pwd;
}
public  void getprint(){
	System.out.println("w------"+name+"----->"+pwd);
}


//反射可以降低偶合性,增加灵活性
public class Test {
public static void main(String[] args) throws Exception{
	//classname可以写入配置文件里
	//假如虽要更换某个类的话,只要修改配置文件就可以
	//还有就是就是虽要调用用某个类的话,可以将classname当参数传入

	String classname="com.donnie2.Custom";
	Class c=Class.forName(classname);
	//c.newInstance();//读取无参数的构造函数
	
	//Constructor cr=c.getConstructor(new Class[]{});//得不带参数的构造函数
	//Object obj=cr.newInstance(new Object[]{});   //调用无参构造函数
	Constructor cr= 
		c.getConstructor(new Class[]{Class.forName

("java.lang.String"),Class.forName("java.lang.String")});
	Object  obj=cr.newInstance(new Object[]{"111","222"});
	
	//用mehtod获得对象中的方法
	 Method m= c.getMethod("getprint", new Class[]{});
	 m.invoke(obj, new Class[]{});  //invoke 执行 ,new Class[]{}代表参数
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值