面向对象编程(Object-Oriented Programming)

面向对象编程(Object-OrientedProgramming)

基于对现实世界的规律的抽象

(一)基本概念

1.类(class):一类事物的总称

类就是一个模板,用于生成实例的内存空间。

2.实例:类的具体存在

类的实例化中,变量保存在栈内存中,存放堆内存地址

实例化的内容保存在堆内存中

3.属性:用于静态描述一类事物的特征,即类级变量(通常不公开,最好为私有)

4.行为:用于动态描述一类事物的动作,即定义方法

(二)访问修饰符—对方法、属性设置访问权限

Public:公开的,谁都可以访问,无论何时何地

Protected:受保护的,仅在当前包下面可以访问,子类可以访问(受包保护)

Private:私有的,仅在当前类下可以使用(类级私有)

Default:默认情况下,其他包无法访问

(三)核心应用

1.静态:被static修饰的属性和方法(不适用于局部变量)

  只占有一次内存,实例化后仍指向该内存

不建议使用实例名来访问静态方法和属性,直接使用类名来访问

规则:

(1)任何方法调用静态属性和方法,直接使用类名.属性名或类名.方法名

(2)任何方法调用非静态属性和方法,直接使用实例名.属性或实例名.方法名

(3)尽量减少使用静态属性和方法,特别是在多线程运行环境下,坚决不允许

2.重载:Overload

同一个类中,可以有同样的方法名,但是参数个数必须不一样,或者参数类型必须不一样。如果都一样的话,顺序必须不一样。

3.重写:Override

  子类覆盖父类的行为(方法)

  同样的方法名,同样的参数

4.setter/getter方法

类属性通常不公开,即设为private。

使用类实例化调用setter/getter方法

使用setter方法进行值的赋值

使用getter方法进行值的调用

5.构造方法:用于实例化类的时候完成一系列的动作

是一种比较特殊的方法,必须被public修饰,无返回值类型,方法名与类名必须同名,可以带参数。

(1)属性的初始化—构造方法的重载

使用带参数的构造方法一次性可以完成属性的初始化

基本构造方法(不带参数),默认构造方法

(2)构造方法中调用其他构造方法必须在第一行,直接使用this(参数列表);

(3)类级代码块:与方法或类级变量同级,没有方法名,没有参数,在类实例化时使用.可用构造方法初始化代替,也是在类实例化时使用,运行时机完全一致。

6.抽象类:abstract

abstract用来修饰一个类,这个类成为抽象类。抽象类不能被实例化,只能被继承(必须被继承)。抽象类担负起定义规范的作用。

抽象类中可以定义普通方法,也可以定义抽象方法,抽象方法必须被子类实现(抽象方法不能被实现,只能被重写)。只有抽象类允许使用抽象方法,即abstract修饰方法时,必须位于抽象类。

Public abstractvoid MyAbstractClass(){      }。

定义一个全部为抽象方法的抽象类称为纯虚类(纯抽象类)。

7.final

被final定义的变量不能被修改,常用于定义常量。

Public finalstatic int i=100;(常与static一起用)

局部变量前加修饰符,只能用final。

final可以修饰变量,方法和类。修饰变量则变量无法修改,修饰方法则方法不能被子类重写,修饰类则类不能被继承。

final与abstract不能同时出现,修饰同一类或方法

8.接口 interface(抽象类可完全代替接口)----接口默认就是抽象

  命名时前加I

  用接口interface来代替纯虚类。

如:public interfaceIPeople(){      }

  接口不能被实例化,不能被继承,只能被实现。

   Publicclass Teacher implements IPeople(){      }

  接口当中的方法只能定义,不能被实现(同抽象方法),不需要abstract修饰方法,接口当中的所有办法默认就是抽象方法。

  继承只能是单一继承,接口可以多重实现。

(四)面向对象六大基本原则

1.开闭原则:通过修饰符进行访问控制,只开放必要的接口给其他类调用(封装起来)

开放的接口(方法)越少越好,可以减少代码的耦合

把改动比较频繁的接口设为私有,开放出去一个相对稳定的接口

2.里氏替换原则:用父类定义,用子类实例化,利用子类的实例替换父类的实例。

父类所拥有的行为,子类一定拥有。但是,子类所拥有的,父类不一定拥有。

子类尽量不要重写。

如:Fatherf=new Son();

3.接口隔离原则:

在不违背单一职责原则的情况下,确保一个接口只做一件事物,不要把无关的处理通过不同的参数融入同一个接口中。

4.依赖倒置原则:抽象类不应该依赖具体类,而是所有的类都应该依赖于抽象类。上层的类不应该依赖于下层的类,上下层类都应该依赖于抽象类。

核心:A类不能直接调用B类,要通过抽象类,即A----抽象类----B类(抽象类的子类)

所有行为只与抽象父类产生耦合,不与某个具体的子类产生任何关系。

5.最少知道原则:不要在方法体内完成类的实例化

6.单一职责原则:一个方法只完成一件最简单的事情,不要把无关的事情放到方法中来完成。

包括类:一个类只描述一件事物,不要把无关的属性和行为放进来

代码之美:每个方法最好只有4行代码,建议每个方法最多不要超过20行,10行为佳

(五)面向对象三大特性

1.封装:属性、行为、访问修饰符、失血模型、开闭原则、单一职责

2.继承:关键字extends  具有传递性、可覆盖性、里氏替换原则、单一继承原则

例如:publicclass Man extends People{   }

(1)子类继承父类(超类、基类、superclass)

默认的修饰符、受保护的属性或方法可以被继承。

私有的属性或方法不能被继承。

(2)行为的重写:子类覆盖父类的行为。

(3)扩展:子类新增一些父类没有的行为

(4)父类可以获取子类的实例:Father f=new Son();(里氏替换原则)

(5)祖宗类(所有类的默认父类):Object(泛型)

在Object类中定义了部分方法,可直接调用,如hashcode

其在Object类中的定义形式为:

public native int hashcode();

//由native修饰,属于本地接口,由C语言调用操作系统底层接口来实现的

(6)this代表本类实例,super代表父类实例

3.多态:抽象类、接口

重载:静态多态性

里氏替换原则:动态多态性

依赖倒置原则:动态多态性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值