//父类
class Fu{
方法1();
}
//子类1继承父类
class Zi1 extends Fu{
方法1();//重写父类方法
方法2();//子类1特有方法
}
//子类2继承父类
class Zi2 extends Fu{
方法1();//重写父类方法
方法2();//子类2特有方法
}
//工具类
class ArrayTools{
方法1(Zi1 a1)//传入的是子类型1对象的形参
{
a1.方法1();
a1.方法2();
}
方法2(Zi2 a2)//传入的是子类型2对象的形参
{
a2.方法1();
a2.方法2();
}
方法3(Fu a3)//传入的是父类型对象的形参(既然是父类就可以全部代表子类类型《就是泛型的意思》,可以传入继承本父类的所有子类对象).
{
a3.方法1();//这里注意:父类只能代表本类方法和子类的同名方法,所以没有子类的方法2.前几天亲测写了不能通过编译.
}
}
class ZhuHanShu{
ArrayTools atl=new ArrayTools();
Zi1 x1=new Zi1;
Zi2 x2=new Zi2;
atl.方法1(x1);//只能传入的是子类型1对象的形参(如果还有继承他的子类也可以).
atl.方法2(x2);//只能传入的是子类型2对象的形参(如果还有继承他的子类也可以).
atl.方法3(..);//以上x1.....x2都都可以
}
为什么工具类能够运行其他子父类中的方法:因为传入的是实参,也就是传入的对象已经实例化并分配了内存加载了类.class文件,
工具类内的方法内还有引用的方法称为方法嵌套,工具类只是起到打包其他类方法的作用,这样不管子类有成百上千的方法,我只要调用工具类里的一个方法就等于调用了子类成百上千的方法,
这样就可以使main()的代码更简洁,少些了成百上千行代码。 |