首先创建一个父类,FatherBasic类。建立三个方法。
然后创建子类,继承父类。重写父类的方法。
意思是:父类里有一些基本的方法,新建的子类根据老板的要求,重写相应方法。
public class Son_1 extends FatherBasic{
public void fun1(){
System.out.println("第一代版本 调用子类方法1"); }
public void fun2(){
System.out.println("第一代版本 调用子类方法2"); } }
最后创建测试类
意思是:测试类相当于一个模块,真实项目中会很多这样的类,执行程序的结果
很好,按照老板的要求做完了。(没有出现问题)然后,客户“想到了”好的点子,希望加进去。为了客户满意,老板想都没想满口答应。对手下说:改!
写代码要比改代码容易。
为了防止客户“良心”发现,想改回去。这是第一个子类作备份,再创建第二个子类。Son2
public class Son_2 extends FatherBasic{
public void fun1(){
System.out.println("第二代版本 调用子类的方法1"); }
public void fun2(){
System.out.println("第二代版本 调用子类的方法2");}}
好了,每个test类里的方法都是写好的。修改 指向的子类对象即可。
有很多类似的测试类,需要调用子类的方法。每个类创建的对象都要修改,重复性的修改。并且一个个的翻找类,看谁调用了,一个也不能漏掉。
老板看了看,说:很好。
员工们笑笑不说话。
客户对比了后,发现还是原来的好,问能不能改回来。
老板。。。 员工。。。。
在这里出现的需求是,有很多测试类要调用子类的方法,当需要不同子类的方法时,就要修改所有要调用的对象,也就是构造方法。为此,提出一种解决方案。
不改动所有的类,新创建一个工厂类,factory类。用这个类来创建对象。
至于为什么要用父类FatherBasic为返回类型,让我们再看一下test类新的写法。
调用静态类factory里创建对象的方法,用父类FatherBasic指向。父类的引用指向子类对象。虽然这个对象是子类对象,但使用的是父类继承的属性和方法,优先调用子类重写父类的方法。这就是Java的多态。
最重要的是,不论客户再有什么修改,只需要修改工厂类里的返回值,往下所有的test类都会跟着修改。减少了重复劳动,Java多态的优势就体现出来了。这个简易的例子就是,工厂模式。
static关键字 final关键字
下面要提写代码常用的两个修饰符
static:静态。可以修饰代码块,方法,属性。
①静态方法和属性指向类,可以不用创建对象直接通过类调用方法。
②静态方法不能调用非静态成员
③静态属性仅在类加载时被初始化
final:修饰符
①修饰类:最终类,不可被继承。也就是类的属性和方法不能被重写
②修饰方法:最终方法,方法不可被重载、重写
③修饰属性:最终属性,只能赋值一次,不可更改
在复习Map集合框架的期间,遇到很多问题,其中的键值之间的运用不够熟练,会在后续重点总结一下其中的概念,原理和难点。下一篇会对Java面向对象进行一个扫尾工作。