经过了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();
}
}