java面向对象
类
定义: 具有相同属性和方法的多个对象的抽象
对象: 对象是具有自身属性和方法的一个类的具体实例(通过new 类得到的,对象是类的一个具体实例)
类的访问控制权限
Public 公共的
Private 私有的
Protected 受保护的
不写的时候 就是默认的
属性
属性的定义:
属性就是变量
定义方法: 数据类型 变量名 (其中数据类型可以是基本数据类型,也可以是一引用数据类型,(类类型))
全局属性: 归当前的类所有,具有默认值,全局变量可以被当前的那个类所有的地方都可以用。
局部属性: 当前区域所有,在局部的变量,没有默认值,在使用之前必须赋初值才能使用。如果有局部变量和全局变量名称相同时,局部采取局部变量优先原则。
构造方法
类中包含构造方法、属性、和普通方法,构造方法不写的话,默认为有一个没有参数的构造方法,如果在创建对象的时候的参数个数为空,则直接调用默认的方法。如果创建的时候有多个参数,且重写构造方法,那么对象的方法和构造方法的顺序、个数、数据类型要一致。
方法
格式: 【访问限定符】【修饰符】返回值类型 方法名【参数…】 {方法体(java代码)}
修饰符 修饰符:static 静态 final 最终 abstract 抽象
返回值: 有返回值(可以是任何类型)如果方法有返回值,必须使用return关键字,并且返回的内容必须与返回值一致。 无返回值void
方法的使用 如果方法没有使用修饰符定义,那么需要使用对象.方法名(【参数】) 进行调用。
方法的重载 同一个类中,同时存在着参数个数、类型、或者是顺序都不同的同名方法,即方法的重载。此时调用这些方法时,需要根据参数的类型个数顺序来进行调用哪一个方法的判断
静态方法和非静态方法
静态方法 用static修饰的方法,只能调用静态属性,可以直接类名.方法名调用,静态方法属于类所有
非静态方法 可以调用静态属性和非静态属性,调用时:先实例化对象 在对象名.方法名,非静态方法属于对象所有
面向对象四大特征
封装
私有化属性: 利用private关键字对属性进行私有化限定
封装 对私有化的属性进行封装
封装就是使用方法来进行对属性的操作
一般封装的方法都称为get()和set()赋值,
每一个私有属性都对应的有一个get和一个set方法,方法的名是get或者set加上属性名字的首字母大写。
继承
定义: 两个类拥有关系,使用extends关键字实现继承
特点
① 只能是单继承 一个类中只能有一个直接父类。
② 一个类可以有多个子类。
③ 子类继承了父类就拥有父类的所有属性和方法
④ 子类可以有自己的独有的属性和方法。
⑤ 重写方法:可以在子类中写一个和父类一样的方法,方法的重写:在两个类中(子父类),方法的名字和参数以及参数的类型、顺序、个数都一样。方法的返回值也必须一致
⑥ 如果A类继承了B类,B类继承了C 。那么A类也就拥有了C类的所有属性和方法。
⑦ 父类必须有一个无参的构造方法。
构造方法不能被继承
多态
同一个对象拥有多种状态:
**向上转型 子类转父类 **
Car cx = new JiaoCar();
编译时状态: 子类=子类
运行时状态: 子类=父类 将子类独有属性和方法进行隐藏
**向下转型 父类转子类 **
JiaoCar jc = (JiaoCar)cx;
必须是进行向上转型之后的那个父类对象,进行强制转换赋值给子类对象。
转型之后就可以调用子类独有的属性和方法。
instanceOf 判断两个是不是子父类
将向上转型时候得到的对象与父类对象进行比较,看看是否是同类型的对象。
boolean bool = cx instanceof Car;
多态的体现:重写和重载
抽象
访问限定符 abstract class 类名{
属性
方法
}
访问限定符 abstract 返回值类型 名字(【参数】);
抽象类的特点
1)所谓抽象方法,是指在类中仅仅声明了类的行为,并没有真正实现行为的代码。
2)抽象方法只能存在于抽象类中,正像刚才所言,一个类中只要有一个方法是抽象的,则这个类就是抽象的。类中只要有抽象方法,那么这个类必须被声明为抽象类
3)构造方法、静态(static)方法、最终(final)方法和私有(private)方法不能被声明为抽象的方法。构造方法不能是抽象的,抽象方法不能是私有的
4)一个抽象类中可以有一个或多个抽象方法,也可以没有抽象方法。
5)抽象类只能被继承(派生子类)而不能创建具体对象即不能被实例化。抽象类不能自己实例化自己
6)一个类如果继承了抽象类,那么就必须重写抽象中的所有抽象方法。重写抽象方法有具体的实现
补充
object类
每一个类都继承自超类object
toString方法
使用时必须重写toString方法
equls方法
equals默认比较的是地址值,可以重写equals方法,然后根据自己重写equals里面的比较方式进行比较