一、面向对象设计原则
1、职责单一
2、OCP原则(o:open c:close p:principle)开闭原则
3、依赖倒置:主要针对父类,可以更加灵活的实现
二、面向对象的三大特征
1、封装
2、继承
3、多态
若是还有第四点,那么就是抽象
三、面向过程与面向对象
面向过程:对一个流程的整个体系需要非常的熟悉,了解每一个细节,事必躬亲。
面向对象:只针对自己所负责的那一块区域,熟知这一小块区域内的所有东西,其他的东西只管使用不负责内部的结构亦或是生产。
四、定义 类
(是对象的抽象)
class 类名{
//属性和方法.
}
1、考虑有哪些类
2、考虑每个类里面的属性和方法(合适的属性或者方法应该出现在合适类中)
3、类与类的关系
一个文件中可以有多个类,但是只允许有一个是public的,并且该public的类名和文件名一致。
(1)继承
(2)依赖:关系比聚集还要弱 例如:班级和学生
(3)聚合:
聚集-关系较弱 例如,球员和教练
组合-关系较强 例如,人的身体各个部位
五、创建对象
类名 对象名 = new 类名();
访问的对象的属性:对象名.属性
访问的对象的方法:对象名.方法名();
六、构造方法
构造方法的特征:
1、方法名和类名相同
2、没有返回类型,连void也没有
3、构造方法是在new对象的时候进行调用
4、当一个类建好之后默认会有一个没有参数的构造方法
5、当类里面加了一个带参数的构造方法之后,原来没有参数的构造方法会自动消失,如果需要使用没有参数的构造方法,需要特殊声明
七、重载(overload) 静态多态
特征:
1、方法名相同
2、参数不同(参数的个数不同、参数的类型不同)与返回类型无关
3、构造方法也可以重载
八、this
1、this代表的是当前对象
2、this只能出现在方法中
3、构造方法使用this互相调用的时候必须放在构造方法的第一行
九、包
1、作用:解决类的重名问题
2、包名的规范:将域名倒着写
类中使用包:package 包名;
包的导入:import 包名.类名;
十、继承
继承作用
继承划分了类的层次性,父类代表的是更一般、更泛化的类,而子类则是更为具体、更为细化;继承是实现代码重用、扩展软件功能的重要手段,子类中与父类完全相同的属性和方法不必重写,只需写出新增或改写的内容,这就是说子类可以复用父类的内容,不必一切从零开始。
继承关系
什么是一种什么,就是包含,例如 A∈B
构造方法
在实例化子类对象的时候,会调用子类的构造方法。 但是在调用子类构造方法的时候,默认会调用父类的没有参数的构造方法,如果父类没有无参的构造方法,那么会报错。 如果非要调用父类有参数的构造方法,那么需要在子类的构造方法中使用super进行显式调用,但是这行代码必须放在第一行。
super
在子类中调用父类的方法或者是属性。
十一、重写(overwrite override) 动态多态
又叫做 覆盖
1、目的:对父类的方法实现不满意,在子类中重写一个方法
2、重写满足的条件:
A、继承关系
B、方法名相同,参数相同,返回类型一致或者兼容
C、重写方法不能使用比被重写方法更严格的访问控制权限
3、@Override 可以在编译的时间检查是不是重写
十二、Object类
toString():输出一个对象的时候,默认会调用toString方法,如果对默认的实现不满意,可以自己去实现toString,这种就叫重写。
equals():判断2对象是否相等,默认的实现就是引用地址是否相等,如果对默认实现不满意,自己重写该方法。
十三、访问控制符
访问权限:
private:可以修饰方法,属性,内部类,即为除了外部类的所有
default:默认,表现为什么都不写,可以修饰外部类,内部类,方法,属性
protected:同private
public:同default
十四、抽象类
1、有抽象方法的类一定是抽象类,抽象类中不一定有抽象方法。
2、抽象类不能被实例化,即为不能被new
3、抽象类中有构造方法,若是被继承,那么必须要有一个没有参数的构造方法,若是没有无参数的构造方法,那么会报错。
PS:abstract,native 方法没有实现。底层一般是c或者c++实现的
十五、final
1、可以修饰类,属性和方法
2、final修饰的限制
(1)final修饰的类不能被用于继承,刚好与abstract矛盾,即为两者不能同时出现。
(2)若是修饰属性,那么被修饰的属性一旦赋值就不能被更改,但是可以不在声明的时候赋值,可以通过构造方法的方式来赋值。
(3)若是修饰方法,那么该方法不能被重写,但是可以被重载。
十六、接口
1、接口的作用:为了解决单一继承不能满足需要的问题。
2、定义接口 interface
3、使用接口 implements
4、接口中定义的内容:接口之中可以定义属性,方法。
5、接口与抽象类的区别
(1)接口中的方法都是抽象的方法,默认为public abstract;在抽象类中的方法可能有抽象的方法,但也可能没有。
(2)接口中没有变量的说法,所有的定义声明都默认为public static final。
(3)接口之中没有构造方法;抽象类中有构造方法,但是两者都不能被实例化,即为都不能new,抽象类的构造方法仅仅是在被继承之后给子类使用。
(4)接口是被实现implements;抽象类是被继承extends。
注:jdk 1.8接口里可以放有实现的方法!
6、接口与类
类可以且仅仅可以继承一个类,可以实现多个接口;接口只能继承接口,但可以继承多个接口。
7.抽象类与接口的设计
抽象类是用于被继承的,两者需要拥有包含关系,例如Animal和Cat;接口是用于被实现的,两者只要有共同点就可以,例如Airport和Bird。
十七、多态
基本条件:
(1)需要有继承或者是实现关系
(2)重写
(3)父类引用子类对象
十八、static
可以修饰除外部类以外的所有。放在方法区的静态池中。static修饰的属性或是方法通过 类名.属性 或者 类名.方法 就可以直接访问,但同时也可以通过产生对象来访问,但被static修饰的某个属性不再属于某个对象,而是所有同类对象公有的。
被static修饰的方法或者是变量被称为 类方法、类变量;其他的无static修饰的被叫做实例方法、实例变量。