POP(面向过程编程)、OOP(面向对象编程)、AOP(面向切面编程)
- 面向对象程序设计的第一步,就是在问题领域中识别出有效的对象,然后从识别出的对象中抽象出类来。
- 一个对象当然可以由其他类的对象来组成,就像一个人体里面有心脏、肠胃一样。对象是由其他对象组成的,而类定义了这样的组合关系。
- 那么下一个问题,就是当一个对象里有多个对象的时候,那些对象之间是如何交互的。对象和对象之间的联系紧密程度叫做耦合。对象和对象的耦合程度越紧,表现在源代码上,就是它们的代码是互相依赖、互相牵制的。我们理想的模型,是对象和对象之间的耦合要尽可能的松,平行的对象要尽量减少直接联系,让更高层次的对象来提供通信服务。
- 所谓容器,就是“放东西的东西”。
类到对象
对象=属性+服务
- 对象变量和普通变量的不同,对象变量是对象的管理者而非所有者,所以涉及到赋值、函数参数传递和比较都与普通变量有所不同。
- 类定义了对象长什么样,对象则是按照类的定义所制造出来的实体,一个类可以创建很多对象,每个对象有自己的数据。
- 用new创建对象,一个类由两种东西组成:表示对象有什么的成员变量和表示对象能做什么的成员函数。
- 现在,写在类里的成员变量,只是一个声明,变量并不在那里,变量不在类里,变量在每一个对象里。
- 函数通过对象来调用
- 构造函数:成员函数名字与类名相同,在主函数构造对象的时候就会被首先调用,构造函数无返回类型,无void{成员方法和构造方法的区别}
toString()是任何Java的类- 类的多态性的表现——函数重载与重写
- 一个类里的成员变量可以是其他类的对象
- 内部类就是指一个类定义在另一个类的内部,从而成为外部类的一个成员。内部类可以被称为成员类,内部类最重要的特点就是能够访问外部类的所有成员。



this.balance=balance
- 类中的成员函数的变量之间如果有名字相同的,用this来区分,而成员函数可以直接调用,不需 this. 来访问,但是this会保留原值不变

用circle的类创建了circle的对象c1,circle类型的变量c1接受了类创造处的对象
类是描述,对象是实体。在类里所描述的成员变量,是位于这个类的每一个对象中的。而如果某个成员有static关键字做修饰,它就不再属于每一个对象,而是属于整个类的了。
通过每个对象都可以访问到这些类变量和类函数,但是也可以通过类的名字来访问它们。类函数由于不属于任何对象,因此也没有办法建立与调用它们的对象的关系,就不能访问任何非static的成员变量和成员函数了。
容器
范型类(不限制大小、有顺序)容器本身是对象,容器add函数存储的是其他对象的地址,容器中的类型必须全部是对象
/*目的:用来存放String的一个类ArrayList*/
ArrayList<String> //念arraylist of string

集合set
Hash表
传统意义上的Hash表,是能以int做值,将数据存放起来的数据结构。Java的Hash表可以以任何实现了hash()函数的类的对象做值来存放对象。
Hash表是非常有用的数据结构,熟悉它,充分使用它,往往能起到事半功倍的效果。

封装,就是把数据和对这些数据的操作放在一起,并且用这些操作把数据掩盖起来
我们有一个非常直截了当的手段来保证在类的设计的时候做到封装:
- 所有的成员变量必须是private的,这样就避免别人任意使用你的内部数据;
- 所有public的函数,只是用来实现这个类的对象或类自己要提供的服务的,而不是用来直接访问数据的。除非对数据的访问就是这个类及对象的服务。简单地说,给每个成员变量提供一对用于读写的get/set函数也是不合适的设计。
继承和多态
面向对象程序设计语言有三大特性:封装、继承和多态性。继承是面向对象语言的重要特征之一,没有继承的语言只能被称作“使用对象的语言”。继承是非常简单而强大的设计思想,它提供了我们代码重用和程序组织的有力工具。
类是规则,用来制造对象的规则。我们不断地定义类,用定义的类制造一些对象。类定义了对象的属性和行为,就像图纸决定了房子要盖成什么样子。
基于已有的设计创造新的设计,就是面向对象程序设计中的继承。
- 在继承中,新的类不是凭空产生的,而是基于一个已经存在的类而定义出来的。通过继承,新的类自动获得了基础类中所有的成员,包括成员变量和方法,包括各种访问属性的成员,无论是public还是private。当然,在这之后,程序员还可以加入自己的新的成员,包括变量和方法。显然,通过继承来定义新的类,远比从头开始写一个新的类要简单快捷和方便。继承是支持代码重用的重要手段之一。
- 一个类只能有一个父类
- 子类可以继承父类中的public、protected域,不能继承父类中的private域,但可以通过父类的public访问器访问其私有域。如果父类没有提供public的访问器,子类就不能访问父类的私有域。
- 除了构造方法,子类继承了父类所有的变量和方法。——要是有一摸一样的变量,父类的变量就被隐藏了
- 在构造一个子类的对象时,父类的构造方法也是会被调用的,而且父类的构造方法在子类的构造方法之前被调用。在父类的构造函数前必须先对父类的定义初始化。super()在这里的区别只有去哪里找父类的构造器
- 子类构造函数必须在构造函数第一行调用父类构造函数,super(),(super实现了子类和父类 的直接跳转入口)
当子类构造函数没有调用父类构造函数的时候是因为父类构造包含无参构造函数,为了节省代码,
系统会自动添加调用。
- 子类构造函数必须在构造函数第一行调用父类构造函数,super(),(super实现了子类和父类 的直接跳转入口)
我们把用来做基础派生其它类的那个类叫做父类、超类或者基类,而派生出来的新类叫做子类。Java用关键字extends表示这种继承/派生关系:
class ThisClass extends SuperClass { //…

extend和implement
extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了
final
注:实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final
构造器
子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
多态
- 对象变量可以保存其声明的类型的对象,或该类型的任何子类型的对象。
- Java中保存对象类型的变量是多态变量。“多态”这个术语(字面意思是许多形态)是指一个变量可以保存不同类型(即其声明的类型或任何子类型)的对象。

-造型:一个对象赋给另外一个变量——不存在对象到对象的赋值 造型不同于类型转换,是看作,不是真的转换- 向上造型:父类变量可以指向子类对象,能自动转换 Father f = new Son();
向上造型:子类的变量不能指向父类对象,需要强制转换father变量=son变量意义是父类指向子类
- 向上造型:父类变量可以指向子类对象,能自动转换 Father f = new Son();
方法覆盖以及绑定
如果子类的方法覆盖了父类的方法,我们也说父类的那个方法在子类有了新的版本或者新的实现。覆盖的新版本具有与老版本相同的方法签名:相同的方法名称和参数表。因此,对于外界来说,子类并没有增加新的方法,仍然是在父类中定义过的那个方法。不同的是,这是一个新版本,所以通过子类的对象调用这个方法,执行的是子类自己的方法。
覆盖关系并不说明父类中的方法已经不存在了,而是当通过一个子类的对象调用这个方法时,子类中的方法取代了父类的方法,父类的这个方法被“覆盖”起来而看不见了。而当通过父类的对象调用这个方法时,实际上执行的仍然是父类中的这个方法。注意我们这里说的是对象而不是变量,因为一个类型为父类的变量有可能实际指向的是一个子类的对象。
当调用一个方法时,究竟应该调用哪个方法,这件事情叫做绑定。绑定表明了调用一个方法的时候,我们使用的是哪个方法。绑定有两种:一种是早绑定,又称静态绑定,这种绑定在编译的时候就确定了;另一种是晚绑定,即动态绑定。动态绑定在运行的时候根据变量当时实际所指的对象的类型动态决定调用的方法。Java缺省使用动态绑定。
OBJECT类

抽象与接口
- 我们用abstract关键字来定义抽象类。抽象类的作用仅仅是表达接口,而不是具体的实现细节。
- 如果一个类有了一个抽象的方法,这个类就必须声明为抽象类。如果父类是抽象类,那么子类必须覆盖所有在父类中的抽象方法,否则子类也成为一个抽象类。一个抽象类可以没有任何抽象方法,所有的方法都有方法体,但是整个类是抽象的。设计这样的抽象类主要是为了防止制造它的对象出来。
-一个类只能继承一个抽象类,而一个类却可以实现多个接口。
抽象
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。
接口
JAVA教程详解

接口不属于对象属于类,但是接口没有对象,但是可以有实现接口的对象,接口的所有函数都是abstract类型的
接口设计模式
控制反转与MVC模式
- 匿名类是内部类

- 注入反转


包
包就是Java的类库管理机制,它借助文件系统的目录来管理类库,一个包就是一个目录,一个包内的所有的类必须放在一个目录下,那个目录的名字必须是包的名字。
Java封装private、public等
private 表示私有,只有自己类能访问
default表示没有修饰符修饰,只有同一个包的类能访问(也叫friendly)
protected表示可以被同一个包的类以及其他包中的子类访问
public表示可以被该项目的所有包中的所有类访问,也可以被任意人拿来定义变量,必须源代码文件名与类名名字相同(要想不相同只能是不是Public)
5.static表示静态的(类变量),一旦通过对象去修改,别的对象里的也改了;而且只有static变量可以通过类.变量去访问,其他不行。任何一个对象都可以拥有共同的一个公共的变量
编译单元
一个.java文件是一个编译单元,当编译单元有很多类的时候,只有一个编译单元可以是Public
思维导图







本文探讨了面向对象编程的基础概念,包括类、对象、继承、多态和封装。强调了类与对象的关系,对象的属性和服务,以及对象间的耦合。提到了容器、集合和Hash表的数据结构,以及如何通过接口和抽象类实现多态性。同时,讨论了Java中的构造函数、抽象类和接口,以及方法的覆盖和绑定。文章还提及了动态绑定和抽象方法的实现,以及最后的控制反转和MVC模式。



1936

被折叠的 条评论
为什么被折叠?



