1.构造方法(构造器)
1.1 格式: 访问权限修饰符 类名(参数);
1.2 若没有自定义构造方法,则类会使用默认的构造方法: 类名();
否则使用自定义的构造方法
1.3 构造方法可用于对象实例化传参,简化代码量
1.4 调用构造方法必须使用关键字new,(在构造方法里面可以使用this()格式调用本类构造方法)
1.5 构造方法不能有返回值
2.访问权限修饰符----JAVA的封装性
2.1 常用于修饰方法与属性
2.2 public:本类、同包、子类、其他包
protected:本类、同包、子类------相对于其他包而言是被封装的
default:本类、同包----相对于其他包及其子类是封装的
private:本类 ----将方法或属性封装,只能自己使用
1.类库:类库文件存放在lib目录下,由API(应用程序接口)组成,java标准类库的类被划分到对应的包中,每个类都属于一个具体的包
2.包(package):类的容器,用于分隔类名空间,若无命名,则默认为(default package)
2.1 package 语句:package 包路径; 例如:packget com.basic.test 表示包的路径为src/com/basic/test;
其中src为源文件路径,默认为workspace/项目名称/src
一个.java文件只能有一个package语句
2.2 导包:import 包路径
例如:import java.util.*; 表示导入java/util/目录下的所有类文件
import java.util.Calendar; 表示导入java/util/目录下的Calendar类文件
3.关键字this--表示调用此属性/方法的对象
3.1 引用本类属性:this.属性名称
3.2 引用本类方法:this.方法名称
3.3 调用本类构造方法:this(参数); ----只能在构造方法的第一行使用
注意:静态方法里面不能使用关键字this
super用法与this一样,它表示调用此属性/方法的对象的父类的对象
4.关键字final
4.1 final类:不能被继承的类;
4.2 final方法:不能被子类重写(overriding)
4.3 final变量:包括静态变量、局部变量、实例变量,变量只能被赋值一次,赋值一次后无法再进行更改;
4.4 final参数:该参数只能被读取,但不能修改;
void test(final int a){}; //带参数方法参数设置为最终参数
注意:final修饰的引用型变量:该变量引用空间只能开辟一次,但允许修改引用空间里面存储的内容(属性或方法)
final修饰的基础类型变量:该变量只能赋值一次,赋值后不允许修改它的值;
5.封装
5.1 概念:将对象的数据与过程封装成一个独立的整体,外部只能通过一个受保护的接口进行访问;
将信息进行隐蔽,隐蔽性是相对(主要通过访问权限修饰符去控制)
5.2 作用:
a.对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,
提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。
b.对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,
减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。
5.3 实现:通过访问权限修饰符private protected等改变属性与方法的访问权限,
对私有属性采用getter/setter方法访问。
5.4 单例模式(Singleton)--静态工厂方法:构造方法私有化,确保一个类只能有一个对象
5.4.1 构造方法私有化;
调用构造方法实例化一个对象;
定义静态工厂方法返回类的实例;
6.继承(JAVA是一种单根继承语言)
6.1 概念:使用已存在的类的定义作为基础建立新类,新类的定义可以增加新的数据或新的功能,
也可以用父类的功能,但不能选择性地继承父类。
6.2 作用:使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。
6.3 格式:class 父类{}
class 子类1 extends 父类{} //使用extends关键字实现继承
class 子类2 extends 父类{}
注:子类又称为父类的派生类
6.4 一个子类只能有一个父类(单根继承),一个父类还可以有一个父类(多层继承)
注:一个子接口可以有多个父接口,弥补单根继承的缺陷
6.5 子类对象实例化过程:
调用父类构造代码块--父类构造方法--子类构造代码块--子类构造方法.
//super()调用父类构造方法
注:new 一个对象时,首先调用构造代码块再调用构造方法
构造代码块:没有任何修饰的代码块
6.6 继承的缺点:a.破坏了类的封装性 b.耦合性高(独立性差)
7.方法重写(Overriding):
7.1 定义:若子类的方法与父类中的某一个方法具有相同的返回类型、方法名称、参数,
则称子类的方法是父类方法的一次重写;
7.2 权限:
a.重写的方法抛出异常范围不能高于原方法;(子类抛出异常是父类抛出异常的子类或抛出异常一致)
b.重写的方法返回类型不能大于原方法;(子类返回类型是父类返回类型的子类或返回类型一致)
c.重写的方法访问权限不能低于原方法;(private<default<protected<public)
7.3 方法重写后,子类对象调用的将是重写后的方法;
8.抽象类:----包含一个抽象方法的类
8.1 格式:abstract class 抽象类的名称{}
8.2 规则:
a.抽象方法与抽象类都必须要使用关键字abstract声明
b.包含一个抽象方法的类(由关键字abstract修饰的方法)必须是抽象类
c.抽象方法只需要声明,不用实现
d.抽象类的子类若不是抽象类,则必须重写抽象类中的所有抽象方法;
8.3 抽象类不能直接进行实例化
抽象类常用设计模式:模板设计---抽象类作为一个模板
例如:体检表---模板(抽象类),
在体检表上面填写相关信息后----使用模板(实现抽象类的抽象方法)
9. 接口:----抽象方法与全局常量的集合 (JDK1.7及以下的版本)
9.1 格式:interface 接口名称{}
9.2 接口中的属性及方法默认访问权限为public,也只能用public 修饰
即使是没有访问权限修饰符表示的也是public修饰(JDK1.7及以下的版本)
9.3 子类实现接口----多实现
class 子类 implements 接口A,接口B...{}
9.4 继承抽象类实现接口
class 子类 extends 抽象类 implements 接口A,接口B...{}
9.5 接口的继承(多重继承):interface 子接口 extends 父接口A,父接口B,...{}
9.6 接口的使用:接口一般常用于制定标准,只有符合该标准的对象才能连接到程序中来。
生活中类似的例子:例如USB接口,只有符合USB接口标准的设备才能连接到电脑上来。
注意:JDK1.8出现新特性,接口功能有所不同
Java类是单根继承的,但接口是多重继承的
10.多态性
10.1 定义:允许不同类的对象对同一消息做出响应,
即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是方法调用)
10.2 多态性表现:
a.对象向上转型:父类 父类对象=子类实例; //子类对象--》父类对象
b.对象向下转型:子类 子类对象=(子类)父类实例; //父类对象--》子类对象
c.方法重载:类里面实现方法多态性
d.方法重写:类与子类之间实现方法多态
10.3 对象向上转型后,父类对象调用的方法是被子类重写的方法
10.4 对象向下转型必须先进行一次向上转型;
10.5 多态存在的必要条件:a.有继承 b.有方法重写 c.父类引用指向子类的对象
10.6 多态的作用:消除类型之间的耦合关系。
10.7 多态的好处:
a.可替换性 b.可扩充性 c.接口性 d.灵活性 e.简化性
11.内部类:
11.1 成员内部类:class A{class B{}} //class B{}为一个成员内部类
11.2 静态嵌套类
11.3 方法内部类
11.4 匿名内部类:
12.工厂方法:-----常用设计模式
12.1简单工厂方法(SimpleFactory):优点是只要下单即能安排生产,使用方便;缺陷是严重依赖Factory类,
一旦此类出现问题则全盘崩溃,
一个产品接口,多个产品实现类;一个核心工厂类完成多个工厂实例方法
12.2工厂方法(Factory Method):每个Factory类相互独立,一个Factory出现问题不影响全局,
但当产品类型过多时会导致类爆炸;
一个产品接口,一个工厂接口,多个产品实现类;多个工厂实现类,
一个工厂实现类完成一个工厂实例方法
13.3抽象工厂方法(Abstract Factory):更复杂更抽象更具备一般性的工厂设计模式
多个产品接口,多个产品实现类;
一个工厂接口;多个工厂实现类;一个工厂实现类完成多个工厂实例方法