2:面向对象

1、
面向过程:第一步做什么,第二步做什么......
面向对象:不再考虑第一步第二步具体去完成什么,而是找个人(对象)来帮我们完成。


2、
java为实现面向对象而使用的基础语法:

TIPs:1)写代码步骤:创建类型、使用类型。
2)承载主方法的那个类型,一般不使用只当作入口。


3、
3.1 类型的定义:
格式:public class 类型名称{类型的内容}

3.2 类的内容:
1)属性:(成员变量)
意义:定义此类型所拥有的特性,就是这个类型有什么。
格式:类型 变量名; //声明变量
TIPs:从格式上可以看出,就是在类中声明了一个变量。
通常在JAVA中,一个类型占据一个源文件。
2)方法:
意义:代表这种类型的行为。
格式:public void 方法名 () {}
修饰词 返回值类型 方法名 (参数列表) {方法体}
意义:定义此类型所能够完成的操作,就是这个类型能做什么

3.3 使用类型:
1)创建对象
格式:new 构造器 ();
eg:Dog d = new Dog();
2)使用对象
格式:变量.成员(属性/方法);
3.4 面向对象编程步骤:
1)创建类型 2)通过类型创建对象 3)使用对象

3.5 类与对象:
类型是对象的模板,对象是类型的具体实现。·



4、包名
用于管理我们的类
1)创建包:包名命名:公司域名 倒置.工作组名称.工程名(一般来说全小写)
2)使用:在每个源文件第一行:package com.farsight.c17072.class2表明当前类型所处包
这个类型以后完整的名称:包名+类名。

TIPs:在JAVA中我们时常出现类型重名的情况,这时候就需要包名的不同来区分
com.farsight.c17072.class2包
com.farsight.c17072.class2.utils包 :是两个完全不同无关的包,并没有包含关系
3)导包:

第一个导入指定包指定类型,第二个导入指定包所有类型


5、修饰词
访问控制修饰词:public(公开,都可以用)
protected(受保护,同一个包下和子类中可以使用)
没有修饰词 (默认,同一个包下可以使用)
private(私有,只能在本类使用)
TIPs:属性和方法必须有访问控制修饰符进行修身,如果不填写就是默认
static
final
6、父类/超类:
7、父接口:
8、 面向对象的三大基本特征(封装,继承,多态):(笔试题可能会考)
封装:隐藏具体实现,公开使用接口。我们编写类的过程就是进行封装。
继承:用于描述类与类之间的一种关系。一种类型属于另一种类型,就可以使用继承语法
语法格式:
public class 类型1 extends 类型2{}
类型1属于类型2
TIPs:子类:extends之前的类型叫子类。eq:Dog是Animal的子类。
父类:extends之后的类型叫父类。eq:Animal是Dog的父类。
作用:子类型能得到父类型所有的成员。
TIPs:一般我们在设计程序时,会发现一些类型拥有相同的功能方法,这种情况我们就可以设置一个父类型,将这些相同的功能定义在父类型中。
限制:1)java中只能实现单根继承:一个类型只能拥有一个父类,但是一个父类可以拥有多个子类。
2)private修饰的成员,子类能够继承到,但是无法访问。
3)子类能继承父类所有的成员:属性、方法。这里构造器是不能被继承的。
4)父类型的属性要被子类使用,请设置为:protected。
我们可以私有化属性,通过方法来返回这个属性的数据。(如图)
TIPs:这里我们更加倾向于通过方法操作属性,为此我们通常会为我们的属性配置对应的setter和getter方法。由方法来完成属性的赋值与数据获取。
父类中:



子类中:

多态:体现程序的多种状态
表现:1)方法多态:方法的重载。同名不同参。
2)类型多态:父类引用指向子类对象。
作用:1)通过父类引用使用子类对象。
2)只能使用父类拥有的成员。
好处:通过父类引用指向子类对象,当我们更换了子类对象后,使用过程是完全不受影响,执行的方法却是不同的。
TIPs:表面是使用的是父类,实际上使用的是子类对象。
父类型可以是父亲的类型,也可以是父接口的类型。
方法的参数和方法的返回值,都可以利用类型多态。
eq:(加入多态的使用)
有一名女士要去宠物店买宠物,宠物有:鹦鹉,小狗,小猫。 女士买了一只宠物并逗它玩耍。
(自己写的)


















this:代表本类当前对象。
super:代表父类当前对象

使用:1)super()代表父类构造器
this()代表本类其他构造器
2)通过this.属性/方法,调用本来的某个属性或者方法,这用于解决局部变量与属性同名问题。super也可以这样使用:super.属性/方法。

TIPs:构造器的限定条件:每个构造器的第一行都必须直接或间接调用父类构造器。如果父类型有空参构造器,那么可以省略。





10、构造器重载:
我们可以为一个类型定义多个构造器,这多个构造器主要实现以不同方式去初始化属性。
构造器重载就是编写多个不同参数的构造器:提供不同的属性初始化方式,根据需求来选择我们需要使用的构造器。
格式:同名不同参。(主要是参数的类型以及顺序)
public 类名(){}

11、方法重写

子类型对父类的某个方法不满意,想要去修改,那么我们就需要使用重写这个语法规则。
语法格式:在子类中重新定义一个父类的方法,并实现内部逻辑,这种操作就是方法重写。
作用:1)覆盖父类的此功能。
2)扩展父类功能。

TIPs:子类重写了父类的这个方法,不代表父类此方法消失,我们依然可以在子类中通过super关键字调用:super.eat();
TIPs:方法重写和方法重载有什么区别?
方法重写:它是指子类和父类的关系,子类重写了父类的方法,但方法名、参数类型、参数个数必须相同。
方法重载:就是在同一个类中,方法的名字相同,但参数个数、参数的类型或返回值类型不同。




业务故事:
有一只重300公斤的熊打了一头大象一耳光。
步骤:1)创建类型
2)通过类型创建对象
3)通过使用对象完成程序
找到主角(故事中的 名词):熊、大象




TIPs:类型名称,最好使用首字母大写。之后的单词首字母也大写
驼峰标识:类名首字母大写,变量名首字母小写,方法名首字母小写

TIPs:方法参数列表的设置:
在方法名之后的小括号内可以声明一个变量,这个变量用来接收方法调用者传递到方法中来的数据


TIPs:1、属性定义了却没有使用
1.1 属性的初始化:
1)javac这个编译器在编译代码时,会进行基本的语法检查,并且帮助我们把没有初始化的属性进行初始化
默认初始值:整型是0,浮点型是0.0,字符型是0,布尔型是false,引用类型是NULL
2)java提供了一个构造器的类结构,专门完成属性的初始化
构造器语法格式:
访问控制修饰符 类名 (参数列表){构造器代码}

TIPs:构造器的代码没有逻辑代码,只有对属性的初始化
3)不写构造器,类型也会拥有。在编译过程中,编译器发现一个类型没有设置构造器,他会自动为这个类型配置一个空参构造器:public Bear(){}。一旦我们为一个类型配置了一个构造器,编译器就不再自动添加空参构造器。
快捷键创建构造器:
1.2 属性的意义:
属性:会影响方法的执行
方法:能使属性进行合法的赋值
TIPs:变量的生命周期:在java中,变量的定义在哪个{}中,他的作用域就在这个{}之中。如下图所示:

2、 方法/构造器中参数的传递:值传递、引用传递
java中变量都只有持有数据的地址,传递的只有地址,所以实质上统统都是引用传递。