类和实例
类:具有相同的属性和功能的对象的抽象的集合
对象:对象就是类的实例
实例:是一个真实的对象,
实例化是创建对象的过程,使用new关键字来创建
构造方法
构造方法又叫构造函数,是对类进行初始化的。
构造方法与类同名,无返回值也没有void,在new的时候调用。
注:
(1)所有类都有构造函数,默认生成空的构造函数
(2)若自己定义了构造方法,默认的构造函数就会失效,若需要空的构造函数需要在写一遍。
(构造方法是重载)
方法重载
方法重载可在不改变原方法的基础上新增功能
注:方法重载时,方法名相同,但参数类型或个数必须要有所不同
抽象类 abstract
让抽象类拥有尽可能多的共同代码,拥有尽可能少的数据
(1)抽象类不能实例化
(2)抽象方法是必须被子类重写的方法
(3)如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否包含其他一般方法
一、代码规范
注释
1 文件头注释
文件头注释以 /开始,以/结束,需要注明该文件创建时间,文件名,命名空间信息。
/*
* Created on 2005-7-2
* /
2 类、接口注释
类、接口的注释采用 /* … /,描述部分用来书写该类的作用或者相关信息,块标记部分必须注明作者和版本。
/**
* @author Java Development Group
* @version 3.0
*/
3 构造函数注释
构造函数注释采用 /* … /,描述部分注明构造函数的作用,不一定有块标记部分。
/**
* 默认构造函数
*/
/**
* 带参数构造函数,初始化模式名,名称和数据源类型
* @param schema
* Ref 模式名
* @param name
* Ref 名称
* @param type
* byVal 数据源类型
*/
.4 域注释
域注释可以出现在注释文档里面,也可以不出现在注释文档里面。用/* … /的域注释将会被认为是注释文档而出现在最终生成的HTML报告里面,而使用/* … */的注释会被忽略。
/**
* The X-coordinate of the component.
* @see #getLocation()
*/
int x = 1263732;
5 方法注释
方法注释采用 /* … /,描述部分注明方法的功能,块标记部分注明方法的参数,返回值,异常等信息。例如:
/**
* 设置是否有外码约束
* @param conn
* Connection 与数据库的连接
*/
6 定义注释
规则同域注释。
注释块标记
块标记将采用如下顺序:
…
*
* @param (classes, interfaces, methods and constructors only)
* @return (methods only)
* @exception (@throws is a synonym added in Javadoc 1.2)
* @author (classes and interfaces only, required)
* @version (classes and interfaces only, required. See footnote 1)
* @see
* @since
* @serial (or @serialField or @serialData)
* @deprecated (see How and When To Deprecate APIs)
* …
一个块标记可以根据需要重复出现多次,多次出现的标记按照如下顺序:
@author 按照时间先后顺序(chronological)
@param 按照参数定义顺序(declaration)
@throws 按照异常名字的字母顺序(alphabetically)
@see 按照如下顺序:
@see #field
@see #Constructor(Type, Type...)
@see #Constructor(Type id, Type id...)
@see #method(Type, Type,...)
@see #method(Type id, Type, id...)
@see Class
@see Class#field
@see Class#Constructor(Type, Type...)
@see Class#Constructor(Type id, Type id)
@see Class#method(Type, Type,...)
@see Class#method(Type id, Type id,...)
@see package.Class
@see package.Class#field
@see package.Class#Constructor(Type, Type...)
@see package.Class#Constructor(Type id, Type id)
@see package.Class#method(Type, Type,...)
@see package.Class#method(Type id, Type, id)
例子:
/**
* 这个类演示了文档注释
* @author Ayan Amhed
* @version 1.2
*/
public class SquareNum {
/**
* This method demonstrates square().
* @param args Unused.
* @return Nothing.
* @exception IOException On input error.
* @see IOException
*/
public static void main(String args[]) throws IOException {
SquareNum ob = new SquareNum();
double val;
System.out.println("Enter value to be squared: ");
val = ob.getNumber();
val = ob.square(val);
System.out.println("Squared value is " + val);
}
}
二、接口型模式介绍
1.接口:
接口可以从多个基接口继承,而类或结构可以实现多个接口
接口可以包含方法、属性、事件和所引器
接口本身不提供他所定义的成员的实现,接口只指定实现该接口的类或接口必须提供的成员
2.接口型模式包括哪些模式?
适配器模式,外观模式,合成模式以及桥接模式等
3.抽象类和接口的区别:
(1)首先,
在abstract class中,可以有自己的数据成员,也可以有非abstract的成员方法,
而在interface中,只能有静态的不可修改的数据成员(即 static final),所有的成员方法都是abstract的
从某种意义上说interface是一种特殊形式的 abstract class
(2)其次,
abstract class是一种继承关系,一个类只能使用一次继承关系(因为java不支持多继承)
但是,一个类可以实现多个interface
(3)本质:
Abstract class 表示的是 “is - a”
Interface 表示的是 “like - a”
(4)实现抽象类和接口的类必须实现其中所有的方法
(5)接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值
抽象类中的变量默认是friendly型,其值可以在子类中重新定义,也可以重新赋值
(6)接口中的方法默认都是public abstract类型的
例子:
Door具有执行两个动作open和close,同时具有报警功能
要清楚AlermDoor本质是Door还是报警器
public abstract class Door {
public abstract void open();
public abstract void close();
}
public interface Alerm {
void alerm();
}
AlermDoor 本质是Door 同时有报警的功能
/**
* 本质是Door 同时具有alerm方法
* @author chen
*
*/
public class AlermDoor extends Door implements Alerm {
public void open(){
}
public void close(){
}
public void alerm(){
}
}
4.接口和委托的区别:
接口包含属性、方法、事件和索引
委托不包含事件
三、适配器模式
1.什么是适配器模式
就是把一个类的接口转换成客户端所期待的另一种接口,从而使原接口不匹配而无法在一起工作的两个类能在一起工作
适配器解决的问题:就是需要的东西就在前面,但却不能使用,短时间内又无法改造它,于是就想办法适配他。
适配器的意思就是使得一个东西适合另外一个东西的东西
2.适配器模式所涉及的角色有哪些?那这些要素主要都做些什么?
目标、客户、被适配者、适配器
目标(CTarget):定义一个客户端使用的特定接口
客户(CClient):使用目标接口,与和目标接口一致的对象合作。
被适配者(CAdaptee):一个现存需要匹配的接口
适配器(Adapter):负责将CAdaptee的借口转换成CTarget的接口
适配器是一个具体的类,是本模式的核心
由此可见,客户端调用Adapter接口的时候,Adapter便会调用Adaptee的操作相应请求,该模式就完成了接口的适配过程。
3.适配器的好处和缺陷
适配器模式可以将一个类的接口和另一个类的接口匹配起来
使用的前提是你不能或不想修改原来的适配器母的接口
4.什么时候适合使用适配器模式
在双方都不太容易修改的时候再使用适配器模式适配
5.适配器总体上可以分为哪两类?及他们的不同
类适配器和对象适配器
类适配器具有两个特点:
(1)适配器类(Adapter)实现客户类所需要的(Target)接口,
(2)适配器类(Adapter)通过继承来实现对Adaptee类的重用
对象适配器:包含一个适配器者的引用,对象适配器也实现了客户类需要的接口,
(a)继承实现Adaptee(被适配者)类重用的例子
Public class Adapter extends Adaptee implements Target{
//重写target中request 方法
Public void request (){
this.specialRequest(); //调用Adaptee 中的specialRequest方法
}
}
客户调用Target接口的request方法,实际就是调用其父类Adaptee的specialRequest方法
(b)通过组合关系实现继承的例子
Public class Adapter implements Target{
Adaptee adaptee = new Adaptee(); //实例化Adaptee
Public void request (){
adaptee .specialRequest(); //调用adaptee 中的specialRequest方法
}
}
客户调用对象适配器的方法时,对象适配器调用他所包含的适配器者实例的适当方法
对于不同的适配器,客户代码完全一样:
Public class Client{
Public static void main (String [] args0{
Target t = new Adapter();
T.request();
}
}
6.生活中的适配器
老式PS2转USB的适配器 二孔转三孔的拖地插排 电脑电源适配器