写在前进的路上

来源:互联网 发布:淘宝上架新品不显示 编辑:程序博客网 时间:2024/04/27 19:25

经过了9天的奋战,终于迎来来了难得的休息,也就是好好的整理自己的所学的东西的时候了。

从第四天开始学习的mysql,据工作的搞android的勇士们说,他们的根本就没有使用导数据库,这也怪,有一天自己的休息没有认真的复习,其实也怪不得什么!只是觉得上课都听懂了,下来也就没有去做了,尤其是动手少得可怜,能看懂,写不出来!

模板设计模式对代码的优化,什么叫模板设计模式?模板设计模式的好处是什么?

 

在解决一些问题或者设计软件的时候,需要定义好一个模板,就相当于事先定义好的协议,以后要做这样的事情就要按照这样的模板来做!目的是为了实现统一的管理!这自然就会想到接口,接口也是规范啊!接口是一种特殊的抽象的类,接口中声明的所有方法都是抽象的,使用Interface关键字来修饰一个接口!那接口是怎么使用的呢?我们可以定义一个来来实现接口,使用implements关键字实现一个接口要实现接口中所有的方法,抽象类除外!通常使用的匿名内部类来实现接口,就扣可以继承接口,使用extends关键字,一个来可以实现多个接口!为了实现多肽!那么什么是多肽?

说道多肽,就说到了覆盖父类的方法,覆盖方法必须和被覆盖方法具有相同的方法名名称,参数列表和返回值类型,如果在子类中想调用父类中的那个被覆盖的方法,我们可以用supper.的格式,覆盖方法时不能使用比父类更严格的访问权限!不覆盖会自动地覆盖父类的方法的!

class person{

 

 public  void run(){

                System.out.print("这个方法是父类的");

}

 

                 class Strudent extends Person{

                         public void run(int num){

                               System.out.println("这是子类的方法");

}

 

                    }

 

                     class Demo{

                     public static void main(String args[]){

           Student stu = new Student();

stu.run();

}

 

}

}                输出的结果是:这个是父类的方法,因为子类没有无餐的方法,所以就自动调用父类无餐的方法,子类的返回值类型也可以是父类的返回值返回值类型的子类!

 

 

亲爱的朋友?你是否为一个方法里面有个super....什么而纳闷呢?是的,这个问题也许你遇过不止一次,有时候甚至删除了也不影响程序的输出结果,为什么还要有这个玩意呢?首先,这是调用父类的那个方法,有了这个方法,这个方法就有子类自己扩展的也有福类的了,入过福类的方法没有使用到,当然不会影响到程序的性能,当然吗,用super.方法名得形式可以省掉很多的代码,同时也达到了调用父类方法的目的!子类的功能可以被父类的变量引用,重构的一原则,方法内的代码不超过20行为最佳!implements后面跟的是接口,extends后面可以是接口,也可以是普通的类,也可以是抽象的类,

 

抽象类,在抽象类中定义的方法都是抽象的方法,但是有些事重object继承过来的,因此,那种方法不是抽象的哦!!interface修饰的类都是抽象的的方法都是抽象的哦!接口中所有的方法的修饰是public,默认的就是,没有二话可说,子类继承父类不能比父类更严格的访问权限!

 

接口的应用:如何实现模板方法是设计模式

1、定义一个抽象的父类作为模板

2、在父类中实现外界调用的方法,将方法方法申明为final

3、根据不同的业务需求定义子类实现父类的抽象方法.

public class StringPrint extends TemplateTest {
 private String data;

 public StringPrint(String data) {
  this.data = data;
 }

 @Override
 void close() {
  System.out.println(">>>");

 }

 @Override
 void open() {
  System.out.println("<<<<");

 }

 @Override
 void print() {
  System.out.println(data);
 }

}
/*
 * 现在的需求是什么呢?就是需要的是在传给print一个字符串,就需要打印出来,怎么办呢? 也许你会传一个参数给print,然后打印出来,但是在这里
 * 不能忽视的额问题是什么呢?StringPrint方法是继承于TemplateTest类,
 * 继承了该类就得这么呢?重写父类方法中的不是private和final修饰的方法,那什么是重写呢?
 * 返回值类型一样,参数列表一样,才叫做重写,那如果给print传进了参数,
 * 还是参数列表一样吗?不一样了?那怎么办呢?那就组合呗,在构造函数中,把需要的字符串申明为自己的成员, 然后将这个变量作为构造函数的参数传进去,
 */class Demo
{
 public static void main(String args[])
 {
  TemplateTest tt = new StringPrint("hello");
  
  tt.run();//调用的是print方法
 }
}
/*//也许你会为打印输出这样的结果也惊讶,为什么呢?因为 是输出结果是" <<<<
 hello
>>>"  但是,认真的分析就会发现,这里是父类引用指向的是子类对象 当子类创建了一个实例对象的时候,传进去的是"hello"
接着就去调用run方法,但是子类明显没有润方法,就去父类找了,
而父类定义好的run方法里面的三个方法都是申明方法了,都是抽象的方法,在子类的到了实现
所以就用实现的了 */

public abstract class TemplateTest {
 
 //定义一系列抽象方法,作为具体的步骤
 abstract void open();
 abstract void print();
 abstract void close();
 //对外提供一个共有的模板方法,规定做事情的先后顺序
 public final void run()//加final的目的是不让子类继承
 {
  open();
  print();
  close(); 
 }  

}

 

 

原创粉丝点击