1、面向对象

1.1概念

所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的执行者变成了指挥者,面向对象是基于面向过程而言的。
l 面向过程强调的是过程,例如:

1、打开冰箱 2、把大象放进去   3、关上冰箱

l 面向对象强调结果,例如:

1、 饿了,去平台点餐,这个动作就是面向对象。你没有去市场买菜洗菜做饭。。。只要有app就可以了。
2、 衣服脏了,直接甩给女票去处理等着穿干净的就可以了。你没有关注中间的过程。。只要找好对象就可以了。
3、面试官问什么是面向对象?你答万物皆对象!!不建议因为你还没到这个深度,最好举例。就像是,你说空即是色色即是空—信你个鬼

1.2三大特征

1、 封装性,把相关的数据封装成一个“类”组件
2、 继承性,是子类自动共享父类属性和方法,这是类之间的一种关系
3、 多态,增强软件的灵活性和重用性

2.类和对象

2.1类

1、 Java语言最基本单位就是类,类似于类型。
2、 类是一类事物的抽象。
3、 可以理解为模板或者设计图纸。

2.2对象

每个对象具有三个特点:对象的状态,对象的行为和对象的标识。
1、 对象的状态用来描述对象的基本特征。
2、 对象的行为用来描述对象的功能。
3、 对象的标识是指对象在内存中都有一个唯一的地址用来和其他对象区分开来。
4、 类是一类事物的抽象,对象是具体的实现。

3.类和对象的创建和使用

3.1对象在内存中的存储

Java把内存分成5大区域,我们重点关注栈和堆

在java中什么是面向过程 怎样理解java的面向对象_java

4.封装

4.1概述

封装是指隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式。
好处:
1、 提高安全性
2、 提高重用性

5.构造方法

5.1概念

构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的创建或者对象的初始化。当类实例化一个对象时会自动调用构造方法。
构造方法和其他方法一样也可以重载。

5.2形式

可以无参也可以有参
修饰符  类名(【参数】){
       代码……
}

5.3构造代码块和局部代码块

5.5.1构造代码块

1、 在类的内部,方法外部,的代码块。
2、 通常用于抽取构造方法中的共性代码。
3、 每次调用构造方法前都会调用构造代码块
4、 优先于构造方法加载

5.3.1局部代码块

1、 在方法里面的代码块
2、 通常用于控制变量的作用范围,出了括号就失效
3、 变量的范围越小越好,成员变量会有线程安全问题
4、  总结:执行顺序:
构造代码块是最优先的,局部代码块顺序执行

5.4this关键字

5.4.1概念

this代表本类对象的一个引用对象。
构造函数中,this()必须放在第一行。

6.继承

6.1概念

继承是面向对象最显著的一个特性。
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

6.2特点

1、 使用extends关键字
2、 相当于子类把父类的功能复制了一份
3、 java只支持单继承
4、 继承可以传递(爷爷,儿子,孙子的关系)
5、 不能继承父类的私有成员
6、 继承多用于功能的修改,子类可以拥有父类的功能的同时,进行功能拓展
7、 像是is a 的关系

6.3super关键字

1、 通过super关键字可以使用父类的内容
2、 super代表父类的一个引用对象
3、 如果用,必须出现在调用位置的第一行

6.4方法的重写

1、 继承后,子类就拥有了父类的功能
2、 那么在子类中,可以添加子类特有的功能也可以修改父类的原有功能
3、 子类中方法签名与父类完全一样(包括方法的返回值,方法名和参数列表,完全一致)时,会发生覆盖/复写操作,相当于修改功能
注意:
1、父类中的私有方法不能被重写
2、子类重写父类方法时,修饰符要大于等于父类修饰符的权限

7.多态

7.1概念

多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。
主要是指同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。
好处是可以把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,统一调用标准。

7.2特点

1、 多态的前提是继承
2、 要有方法的重写
3、 父类引用指向子类对象,如:Animal a = new Dog(); -- 小到大,向上转型
4、 多态中,编译看左边,运行看右边

8.异常

8.1概述

用来封装错误信息的对象,组成结构
:类型、提示、行号

8.2访问控制符

9.接口

9.1概念

Java里面由于不允许多重继承,所以如果要实现多个类的功能,则可以通过实现多个接口来实现。

9.2特点

1、 接口中都是抽象方法
2、 通过interface关键字创建接口
3、 通过implements让子类来实现
4、 可以理解成,接口是一个特殊的抽象类
5、接口突破了java的单继承的局限性
6、 接口和类之间可以多实现,接口和接口之间可以多继承
7、 接口是对外暴露的规则,是一套开发规范
8、 接口提高了程序的功能扩展,降低了耦合性

9.3案例

public class T {

       public static void main(String[] args) {
              Zi z = new Zi();
              z.study();
              z.teach();
       }
}
interface Fu{
       public abstract void study();
       public abstract void teach();

}
//实现+重写
class Zi implements Fu{
       public void study(){
              System.out.println("Zi..study()");
       }
       public void teach(){
              System.out.println("Zi..teach()");
       }

9.3接口的复杂用法

package tt.inter;
public class Test1_ComInter {
	public static void main(String[] args) {
		Interface1 in=new Interface1Impl();
		in.save();
		in.update();
	}
}
//创建接口1
interface Interface1{
	void save();
	void update();
}
//创建接口2
interface Interface2{
	void get();
	void delete();
}
interface Interface3 extends Interface1,Interface2{
	void add();
}
//3.接口还可以多实现吗
class ManyImpl implements Interface1,Interface2{
	public void save() {}
	public void update() {}
	public void get() {}
	public void delete() {}
}
//4、接口可以继承的同时,多实现?? --
class Interface3Impl implements Interface3{
	@Override
	public void save() {}
	@Override
	public void update() {}
	@Override
	public void get() {}
	@Override
	public void delete() {}
	@Override
	public void add() {}
}
class Interface1Impl implements Interface1{
	@Override
	public void save() {
		System.out.println("save()...");
	}
	@Override
	public void update() {
		System.out.println("update()...");
	}
}