复习面向对象
理解面向对象
我们知道c语言是面向过程的开发语言,关注解决问题的流程;
那我们举一个比较简单的例子,把大象装进冰箱;
面向过程
1、开门
2、装大象
3、关门
面向对象
冰箱类{装大象()、开门()、关门()}
大象类{,}
面向对象解决问题
抽取出具有共同属性、行为的事物作为类;
对象是真实存在的事物;
类的结构
1、成员变量、局部变量;
成员变量举例:单例模式懒汉和饿汉
//饿汉式类加载就创建
private static SingletonDemo instance = new SingletonDemo();
private SingletonDemo(){
};
private static SingletonDemo getInstance(){
return instance;
};
2、一般方法、构造方法;
3、代码块、静态代码块;
静态代码块随类加载执行;
实例代码块随对象创建执行;
4、内部类;
内部类举例:ReentrantLock的公平锁和非公平锁使用AQS内部类
abstract static class Sync extends AbstractQueuedSynchronizer
static final class NonfairSync extends Sync
static final class FairSync extends Sync
重载重写
重载
类的方法中名字相同,参数不同(参数类型、参数个数);
重写
父类的方法不满足子类的需求,我们知道java中所有的类都继承object,我们常见的重写有toString()方法、equals()方法;
需要注意的是重写equals方法必须要重写hashcode方法;
否则我们在hash存放引用类型元素会造成值相同的引用对象存放多份;
权限修饰符
public(所有)
private(仅类本身)
default(同类、同包)
protected(同类、同包、不同包子类)
符合设计模式开闭原则,对修改关闭、对拓展开放;
面向对象特性
封装
通过权限修饰符隐藏类的信息,对外提供访问接口;
符合设计模式迪米特原则,对外除了public,尽量不与外界沟通;
继承
提高复用;
重写满足子类个性化需求;
多态
提高扩展,解耦;
重写子类扩展不同的功能;
接口、抽象类
都是处于顶层,制定规则;
接口只能定义声明静态常量、抽象方法,无构造方法;
接口可以继承多个接口、类可以实现多个接口;
servlet举例
我们自己编写的servlet类继承HttpServlet抽象类;
HttpServlet又继承GenericServlet抽象类;
GenericServlet抽象类实现servlet顶层接口;
使用抽象类实现接口,抽象类继承抽象类这样既逐层扩展了功能,又逐层实现一些非必要了解的细节,降低我们的开发难度;我们只需要在开发时重写较少的方法便可实现业务;
我们开发时只需要重写doGet方法,生命周期GenericServlet已经帮我们重写了;
HttpServlet扩展了许多方法
servlet中只有生命周期方法
package javax.servlet;
import java.io.IOException;
public interface Servlet {
public void init(ServletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException;
public String getServletInfo();
public void destroy();
}