面对对象:Object Oriented Programming ,是基于面向过程发展而来的,万物皆对象。
类:一组相关属性(事物的特征)和行为(事物的动作)的集合
定义类就是定义属性和行为,在Java中用class修饰
属性:成员变量:定义方式相同,位置在类中方法外
行为:成员方法:定义方法相同,只不过没了static
对象的使用:类名 对象名/引用名=new 类名();
使用成员变量:对象名.成员变量名
使用成员方法:对象名.方法名
对象:用来描述客观事物的一个实体,由一组属性和方法构成
面向过程弊端:1、自顶而下,每次更新繁琐。2、制约可维护性和扩展性
全局变量和局部变量;1、便令声明的位置决定变量的作用域。2、变量作用域确定可在程序中按照变量名访问该变量的区域。3、同一个类中, 全局变量和局部变量同名时,局部变量优先级更高。
面向对象三大特征:封装,继承,多态。
封装:隐藏类的属性和实现细节,仅对外提供公共的访问方式
优点:提供案例安全,提高了代码的复用性
原则:类的所有属性必须封装,对外提供访问方式
private关键字:私有的,是一个权限修饰符,可以修饰成员变量和成员方法
this关键字:代表当前类的对象引用,防止局部变量隐藏成员变量(默认就近原则)
构造方法:给成员变量初始化的,系统会给一个默认构造方法,一般是创建对象用的。
格式:修饰符 类名(){}
特定是没有返回值,连void都没有
注意:1、我们一旦给出构造方法,系统就不会给任何的构造方法
2、构造方法是可以重载的
3、在定义类的时候,一定要手动给出无参构造方法,养成习惯
类的标准写法:成员变量,构造方法,成员方法。
类的初始化过程:
1、加载类文件进入内存
2、在栈内存中为类开辟空间
3、在堆内存中为类对象开辟空间
4、对对象的成员变量进行初始化
5、在对象中引用方法
6、通过构造方法的值给成员变量赋值
7、把对象的内存地址赋值给类
static关键字:静态的,可以修饰成员变量和成员方法
方便调用,类名.成员名(成员变量,成员方法)
特点:1、所有对象都公用这个静态属性
2、静态成员优先于对象存在
3、静态成员又称之为类成员
成员变量和成员方法又称之为对象成员
匿名对象:没有名字的对象,只用一次,节省内存空间
代码块{},根据位置不同判断
局部代码块:在调用方法时会执行局部代码块
成员代码块:在每次执行构造方法之前,先执行成员代码块,构造方法代码块
静态代码块:类加载的时候就会执行,只会执行一次
同步代码块:只用Synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的数据的读写操作是需要互斥进行的,否则会导致数据的不一致性,需写在方法中
局部变量和成员变量的区别:
局部变量类中位置在方法声明或方法体,内存位置在栈中,生命周期随方法的运行而产生,方法的消失而消失,没有默认初始值,必须手动赋值
成员变量类中位置在方法体外,内存位置在堆中,生命周期随对象的创建而产生,对象的消失而消失,创建对象时,系统会给默认值。
访问修饰符作用域:
private:同一个类中可以访问,同一个包中不可以访问,同一个子类中不可以访问
默认修饰符:同一个类中可以访问,同一个包中可以访问,子类不可以访问
protected:同一个类中可以访问,同一个包中可以访问,子类可以访问
public:任何地方都可以访问
super和this的区别:
this访问本类属性,如果没有则从父类找,访问本类方法,如果没有则从父类找,调用本类构造,放在构造方法首行
super访问父类中的属性,方法,调用父类构造,放在子类构造方法首行
继承:多个类中存在相同属性和行为时,将这些内容抽取到一个单的类中
格式:class 子类 extends 父类
单独的类称为父类,基类,超类,这些类称为子类,派生类
优点:复用性,维护性,让类与类之间产生关系,增加类与类之间的耦合性,是多态的前提,设计开发的原则,低耦合,高内聚
特点:java中只能单继承,不能多继承,可以层继承
继承的注意事项:
1、子类继承父类所有非私有的成员(成员变量和成员方法)
2、子类不能继承父类的构造方法,但可以通过super去访问父类的构造方法,必须在子类构造方法以前,因为子类构造方法默认会调用父类构造方法
3、两个类之间体I型昂时“is a”的关系就去继承
A是B时 A继承B
继承成员变量的关系:
1、子类和父类的成员变量不一致时,谁有用谁
2、子类和父类的成员变量名称一致时,就近原则,先找子类,有就用,没有再去父类找
Object类:祖宗类,所有子类的父类
Object方法:
toString() 返回当先对象本身的相关信息,按字符串对象返回
equals() 比较两个对象是否是用一个对象,是则返回true
hashCode() 返回该对象的哈希代码值
getClass() 获取当前对象所属的类信息,返回class对象
继承中构造方法的关系:
1、子类在创建对象时,会默认的调用父类的无参构造方法
2、super(); 一定要放在子类构造方法的第一行
3、如果父类没有无参构造,使用super去调用父类的有参构造方法
继承中成员方法的关系:
1、父类和子类方法不同时,有谁用谁
2、父类和子类方法相同时,选子类,子类出现与父类相同方法时,方法重写
3、方法相同指:返回值类型,方法名,参数列表相同的就可以重写了
子类的权限不能更低,子类重写父类方法时,父类方法是静态的,子类也必须是静态的
Overload:方法重载:同一个类中,方法名相同,参数列表不同的,与返回值无关
Override:方法重写
抽象类:有些功能不能有具体的实现,称为抽象方法,有抽象方法的就是抽象类
格式:抽象类 public abstract class 类名{}
抽象方法 public abstract void 方法名();
特点:
1、抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
2、抽象类不能实例化
3、抽象类的子类可以是抽象类,可以是具体类
4、抽象类要实例化,可以使用具体的子类去实例化
抽象类成员:
成员变量:常量和变量
构造方法:有构造,只是不能实例化,用于初始化成员变量
成员方法:
1、抽象方法:限制子类的必须实现的功能
2、具体方法:用于继承
接口:为了体现事物的扩展性,java中就提供了接口来定义这些功能,不给出具体实现
特点:
1、public interface 接口名{}
2、类和接口的关系是实现关系,类实现接口,可以单实现,也可以多实现 public class 类名 implements 接口名{}
3、接口与接口的关系:单继承,也可以多继承
4、类实现接口时,也会继承接口中的成员
接口静态方法:使用default修饰,不可省略,供子类调用或者子类重写
接口静态方法:使用static修饰,供接口直接调用
私有方法和私有静态方法:使用private修饰,供接口中默认方法和静态方法使用,私有方法是对默认方法和静态方法的辅助,抽取接口中多个默认方法,封装到私有方法中,供默认调用
类与类:单继承,可以多层继承
类与接口:实现关系,单实现,也可以多实现
接口与接口:继承关系,单继承,可以多继承
设计理念的区别:
抽象类:定义的是该继承体系的共性功能
接口:接口中定义的是该继承体系中的扩展功能
多态:一个对象在不同时刻表现出的不同状态
多态的前提:
1、有继承关系
2、有方法的重写
3、父类引用指向子类对象
成员特点:成员相同,只执行父类成员,成员变量相同时,成员变量父类为主,构造方法先父类在子类,成员方法编译看父类,运行看子类
多态向上转型:子类对象赋值给父类引用,多态本身的诠释
格式:父类 引用名=new 子类();
有三种多态:具体类向上转型,抽象类向上转型,接口向上转型
向下转型是用法是专门调用子类独有的成员
子类 引用名 =(子类) 父类;
instanceof 判断此对象引用是否是某一个数据类型
a instanceof A 带参构造方法不能直接调用,需要子类super出父类带参构造方法
OOP三大特征:
封装:吧对象的属性和方法的实现细节隐藏,仅对外提供一些公共的访问方法
继承:子类会自动拥有父类所有可继承的属性和方法
多态:配合继承与方法的重写提高了代码的复用性和扩展性