-------------静态多态----------
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[]{}代表参数
}
}