面向对象(OO)是一种以事物为中心的编程思想。

面向对象程序设计(OOP),是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。

对象(object)代表现实世界中可以明确标识的一个实体,具有属性和行为;

1.1特点:

是一种符合人们思考习惯的思想可以将复杂的事情简单化 将程序员从执行者转换成了指挥者

完成需求时:先要去找具有所需的功能的对象来用。如果该对象不存在,那么创建一个具有所需功能的对象。这样简化开发并提高复用。

1.2特征:

封装(encapsulation)封装的实现设置类的属性private(关键字),不能使用对象名.属性名的方式直接访问对象的属性。私有并不代表封装的全部,私有知识封装中其中的一种做法。private修饰的成员在自己所在的类中可以使用,在类外边不可以使用。提供对外可以访问的方法:定义getset方法的好处:set方法中加入逻辑判断,过滤掉非法数据。

继承(inheritance)

多态(polymorphism)

开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。

设计的过程:其实就是在管理和维护对象之间的关系.

1.匿名对象的使用:

当只使用一次时可以使用匿名对象。执行完毕到;该对象就变成了垃圾。

new Car().run();

执行方法时,可以将匿名对象作为实际参数,传递进去。

2.构造代码块与构造函数的区别:

作用给对象进行初始化。对象一建立就运行并且优先于构造函数。

与构造函数区别

1:构造代码块和构造函数的区别,构造代码块是给所有对象进行统一初始化, 构造函数给对应的对象初始化。

    2:构造代码块的作用:把不同对象的共性内容,放到构造代码块中,统一初始化。例如孩子一出生统一哭,图书馆初始化有书

3.构造函数与普通函数的不同

4.1: 函数名与类名相同

    4.2:不需要定义返回值 和void 不同  

4.3:不可以定义return语句

4.this:所在函数所属对象的引用。体验this在构造函数中打印this创建对象,打印对象名p3thisp是一样的都是内存地址值。

5.静态成员变量:被静态修饰的成员变量被所有的数据共享。静态成员变量不需要创建对象就可以直接访问。非静态成员变量需要创建成员变量才可以直接访问。

6.静态函数:静态函数不能访问非静态变量,使用静态代码块进行验证,静态代码块的特点:

随着类的加载而加载,并且只执行一次,优先于主函数,作用是给类进行初始化。

普通函数既能访问非静态变量也能访问静态变量;静态函数中不能有thissuper关键字;为什么呢?这与静态函数的第三个特性有关,静态是优于对象而存在的,类加载就存在了,如果使用this无法指向所在函数所属的对象。

7.静态变量(类变量)和实例变量的区别:

8.1生命周期:静态变量随着类的加载而存在,随着类的消失而消失。实例变量随着对象的创建而存在,随着对象的消失而消失

8.2所在区域,静态变量存在存在方法区中,实例变量存在于堆内存中

继承:类与类之间的关系,使用extends关键字。细节:类名的设定,被继承的类称之为父类,继承的类称之为子类子类并不能继承父类中所有的成员父类定义完整的成员 静态成员,非静态,构造方法。静态变量和静态方法都可以通过子类名.父类静态成员的形式调用成功所有的私有成员不能继承,private修饰的成员。构造函数不能被继承

8.super关键字

super关键字作用

1:主要存在于子类方法中,用于指向子类对象中父类对象。

2:访问父类的属性

3:访问父类的函数

4:访问父类的构造函数

9.重写:在继承中,子类可以定义和父类相同的名称且参数列表一致的函数,将这种函数称之为函数的重写.前提必须要有继承关系

10.重载与重写不同

重载和重写的不同

1:重载(overload):  

1:前提: 所有的重载函数必须在同一个类中 

        2:特点: 

       函数名相同,参数列表不同,与其他的无关(访问控制符、返回值类型)

3:不同:

个数不同 、 顺序不同、 类型不同 

2:重写(override)

     1:前提: 继承

2:特点:

      函数名必须相同、参数列表必须相同。

11.final关键字,主要用于修饰类、类成员、方法、以及方法的形参。

修饰类,该类无法被继承。是最终类,

修饰类成员,基本数据类型,final使得其值不变,引用数据类型,使得引用不变。一般和static关键字结合使用。

修饰方法:声明为最终方法,不能重写

修饰方法中的形参,形参无法被重新赋值。

13.为什么子类一定要访问父类的构造函数呢

1:子类继承了父类的属性,如果要使用父类的属性必须初始化,创建子类对象,必须先初始化父类属性

必须调用父类的构造方法。

14.为什么super()this()语句要放在构造函数的第一行

子类可能会用到父类的属性,所以必须先初始化父类。

15.修饰关键字abstract,抽象。

抽象类: 1:有抽象函数的类,该类一定是抽象类。

2:抽象类中不一定要有抽象函数。

3:抽象类不能使用new创建对象

1:创建对象,使用对象的功能,抽象类的方法,没有方法体。

4:抽象类主要为了提高代码的复用性,让子类继承来使用。

5:编译器强制子类实现抽象类父类的未实现的方法。

1:可以不实现,前提是子类的也要声明为抽象的

16.接口,进行功能扩展,使用interfac关键字声明,使用implements关键字实现。

17.接口特点

1:接口中定义的所有属性默认是public static final的,即静态常量即使静态常量,那么定义的时候必须赋值。

2:接口中定义的方法不能有方法体,接口中定义的方法默认添加public abstract1:即接口不能定义实现方法2:不添加public abstract也可以,默认添加,但不便于阅读 

3:接口不可以创建对象,因为接口有抽象方法。

4:接口要被子类实现,子类对接口中的抽象方法全部覆盖后子类才可以实例化,否则子类是一个抽象类。

5:接口可以被类多实现

18.多态:父类对象的引用指向了子类对象,前提,继承或者实现了。

作用:多态可以作为形参,接受范围更广的对象,避免函数重载过度使用。

特点:1:编译时期,参考引用型变量所属的类是否有调用的方法,如果有编译通过。没有编译失败

2:运行时期,参考对象所属类中是否有调用的方法。

3:总之成员函数在多态调用时,编译看左边,运行看右边。

在多态中,成员变量的特点,无论编译和运行参考左边(引用型变量所属的类)。

在多态中,静态成员函数特点,无论编译和运行都参考左边

总结:父类和子类有相同的成员变量,多态下访问的是父类的成员变量

19.内部类分类

变量可以分为成员变量和局部变量,内部类根据存放位置也可分。

1:成员内部类

1:成员内部类和成员变量和成员方法是并列的。

2:成员内部类也是类,也可以定义成员变量和成员方法

2:局部内部类

19.1 为什么定义内部类,成员内部类作为外部类的成员,可以直接访问外部类的所有成员。

20.匿名内部类

使用匿名内部类的前提1:内部类要继承一个类或者实现接口格式 new 父类或接口(){子类内容}匿名内部类就是一个匿名子类对象

注意:private修饰的成员内部类只能在内部类所在的外部类中创建和访问.

如果成员内部类包含静态成员,java规定内部类必须声明为静态的。

局部内部类访问所在方法的局部变量,该变量需要是final的。