Java面向对象

面向对象的三大特征

在这里插入图片描述

面向对象的五大基本原则

单一职责原则SRP

指一个类的功能要单一,不能包罗万象。如果一个类承担的职责过多,就等于把这些职责耦合在一起了。一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。而如果想要避免这种现象的发生,就要尽可能的遵守单一职责原则。此原则的核心就是解耦和增强内聚性.

开放封闭原则OCP

软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。主要体现在两个方面:

  • 对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
  • 对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
里氏替换原则LSP

子类应当可以替换父类并出现在父类能够出现的任何地方。父类应尽可能使用接口或者抽象类来实现

依赖倒转原则DIP

传统的结构化编程中,最上层的模块通常都要依赖下面的子模块来实现,也称为高层依赖低层!所以DIP原则就是要逆转这种依赖关系,让高层模块不要依赖低层模块,所以称之为依赖倒置原则!即:

  • 高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
  • 抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
接口分离原则ISP
  • 一个类对另外一个类的依赖性应当是建立在最小的接口上的。
  • 一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。

关键字static

  • 静态方法和静态变量是属于某一个类,而不属于类的对象
  • 静态变量是供类所有的对象共享的,不安全,很少用
  • 在静态方法中不能调用非静态的方法和引用非静态的成员变量。反之可以
  • 静态变量和静态代码块是在加载类的时候初始化的

构造方法

  • 什么是构造方法
    • 构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成的,其功能主要是完成对象的初始化。
  • 构造方法的特征
    • 它具有和类相同的名称
    • 它不包含返回值
    • 它不能在方法中用return语句返回一个值
  • 构造方法的几个细节
    • 每个Java类中至少有一个构造方法
    • 关于默认构造方法Java的类都要求有构造方法,如果没有定义构造方法,Java编译器会为我们提供一个缺省的构造方法,也就是不带参数的构造方法。
    • private修饰的构造方法,表示当前类不能被创建。Util类

方法的重载 overload

  • 方法的名称相同
  • 参数类型或参数个数不同
  • 返回值的类型和访问权限可以不同

方法的重写 Override

  • 子类继承父类之后,重写父类的方法
  • 方法的名称,参数类型和参数个数相同
  • 返回类型必须要兼容
  • 不能降低方法的访问权限,如:父类的方法是public的,子类的就不能是private的
  • private,static和final方法不能被重写
  • Exception需要更具体

特殊变量super

  • 特殊变量super,提供了对父类的访问。
  • 可以用super访问父类被子类隐藏的变量或覆盖的方法
  • 每个子类构造方法的第一条语句,都隐含地调用super(),如果父类没有这种形式地构造函数,那么在编译地时候就会报错。

嵌套类与内部类

嵌套类:在类的定义体中定义另外的类

如果使用static声明,即静态嵌套类,则不能访问外部类的非静态成员;

内部类:非静态嵌套类

  • 内部类可以处于一个类内部任何位置,可以与实例变量处于同一级,或处于同一级,或处于方法之内,甚至是一个表达式的一部分
  • 内部类可以访问外部类的成员
  • 初始化内部类的对象时需要有外部类的实例变量,如Outer.Inner inner=new Outer().new Inner().

抽象类(Abstract)

抽象方法

  • 只需声明,而不需实现
  • 它的方法体的实现交给该类的子类根据自己的情况去实现
  • 构造方法、静态方法、私有方法、final方法不能被声明为抽象方法
  • 必须用abstarct关键字来修饰
    例:
    public abstract boolean setCheck(Animal argAnimal);

包含抽象方法的类就叫抽象类

  • 抽象类必须用abstract关键字来修饰
  • 不能被实例化
  • 抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是个抽象类
    public abstract class CheckCenter{ }

接口

  • 接口是抽象方法和常量值的定义的集合,而没有变量和方法的实现
  • 接口中的成员都是public访问类型的,接口里的变量默认是用public static final标识的
  • 在接口中声明方法时,不能使用native、static 、final 、synchronized 、private 、protected等修饰符
  • 可以定义一个新的接口用extends关键字去继承一个已有的接口
  • 可以定义一个类用implements关键字去实现一个接口中的所有方法
  • 还可以去定义一个抽象类用implements关键字去实现一个接口中定义的部分方法
  • 一个类可以实现一个或多个接口,一个接口可以继承一个或多个接口

抽象类与接口的区别

语法层面

  • 语法结构不同
  • 类继承/实现时使用的关键字也不同(extends/implements)

编码层面

  • 抽象类只能继承一个,接口可以实现多个
  • 抽象类可以定义默认实现,接口不行

设计层面

  • 抽象类的定义是为了实现类的父子关系,是"is a "的关系
  • 接口是为了定义某种行为规范

final关键字

修饰变量

final标记的变量即成为常量,只能赋值一次。

  • 修饰局部变量
  • 修饰函数参数变量
  • 修饰成员变量
    • final标记的成员变量必须在声明的同时或在类的构造方法中显示赋值
  • 修饰static变量
修饰方法

final标记的方法不能被子类重写

修饰类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值