面向对象

一、面向对象设计原则

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 包名.类名;

十、继承

  1. 继承作用

    继承划分了类的层次性,父类代表的是更一般、更泛化的类,而子类则是更为具体、更为细化;继承是实现代码重用、扩展软件功能的重要手段,子类中与父类完全相同的属性和方法不必重写,只需写出新增或改写的内容,这就是说子类可以复用父类的内容,不必一切从零开始。 
    
  2. 继承关系

    什么是一种什么,就是包含,例如 A∈B
    
  3. 构造方法

    在实例化子类对象的时候,会调用子类的构造方法。
    但是在调用子类构造方法的时候,默认会调用父类的没有参数的构造方法,如果父类没有无参的构造方法,那么会报错。
    如果非要调用父类有参数的构造方法,那么需要在子类的构造方法中使用super进行显式调用,但是这行代码必须放在第一行。
    
  4. 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修饰的被叫做实例方法、实例变量。

你可能感兴趣的:(java基础,Java基础)