一、什么是面向对象:
1、本质:以类的方式组织代码,以对象的组织(封装)数据。
2、三大特征:封装,继承,多态。
3、从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象,是对对象的抽象。
从代码运行角度考虑是先有类后有对象。类是对象的模块。
二、创建并初始化对象
1、使用new关键字创建对象
使用new关键字创建的时候,出了分配内存空间之外,还给创建好的对象进行默认的初始化,以及对类中的构造器的调用。
2、类中构造器的调用
1、类中的构造器也称为构造方法,是在创建对象的时候必须要调用的,并且构造器有两个特点:1、必须和类名相同,必须没有返回类型,也不能写void
2、注意:
a、构造器名要和类名相同,没有返回值。
b、,使用new,本质就是在调用构造方法。
c、定义有参构造之后;如果想使用无参构造,就要显示定义一个无参的构造。
三、封装
1、该露的露,该藏得藏:
程序设计追求“高内聚,低耦合”。高内聚就是内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。
2、封装:就是对数据的隐藏(private)
3、想访问私用的属性(private :私有),就用get/set的方法。
4、封装意义:
a、提高程序的安全性,保护数据
b、隐藏代码的实现细节
c、统一接口
d、增加了系统的可维护性
四、继承
1、继承的本质:是对某一些类的抽象,从而实现对现实世界更好的建模。
2、使用关键字extends(子类是父类的扩展)
a、继承是类与类之间的一种关系。
b、继承关系有两个类:一个类为子类(派生类),另一个类为父类(基类),子类继承父类,使用关extends来表示
c、子类和父类之间,从意义上讲应该具有“is a”的关系。
3、java类中只有单继承,没有多继承。==》一个父类有很多子类,但一个子类只有一个父类
4、即使类中什么都没有写,什么都没有继承,都可以调用一些方法?====》因为在java中,所有的类都会默认直接或者间接继承Object类(Object类 ===》超类)
5、修饰符的权限:public(公共的)>protected(保护的)>default(默认的)>private(私有的)
注意:一个java类中可以有多个class文件 ,但只能有一个public class
5、super:
1、注意点:a、super调用父类的构造方法,必须在构造方法的第一个。
b、super必须只能出现在子类的方法或者构造方法中。
c、super和this 不能同时调用构造方法
拓展:super和this区别:
相同点:在构造方法里面,必须放在方法的第一行,但是this和super不能同时出现和使用。
不同点:1、代表的对象不同:this :本身调用者的对象;super :代表父类的对象
2、使用前提不同:this :没有继承也可以使用;super : 只有继承条件才可以使用
3、构造方法调用对象不同:this :本类的构造 ;super : 父类的构造
6、重写:
1、需要有继承关系,子类重写父类的方法
2、方法名必须相同
3、修饰符:修饰符的权限可以增大,但不能减小 ;修饰符的权限:public(公共的)>protected(保护的)>default(默认的)>private(私有的)
4、抛出的异常:范围可以被缩小,但不能扩大
5、总之,重写:子类的方法要和父类的方法要一致,只是方法体不相同。
为什么要重写父类的方法?
1、父类的功能,子类不一定完全需要或者不一定完全满足!
重写的快捷键:alt+insert 选择override
拓展:重写(override)和重载(overload)的区别
重写:1、override表示重写,在继承关系中,子类重写父类的方法
2、好处:不影响父类的原来的功能,只是改变子类的功能
3、“两同两小一大”规则:a、方法名相同,参数类型相同,b、子类返回类型小于等于父类方法的返回类型
c、子类抛出的异常小于等于父类方法抛出的异常,d、子类访问权限大于等于父类方法访问权限
重载:1、overload表示重载,在一个类里。
2、方法名相同,参数列表不同
3、好处:体现程序的灵活性
哪些关键词修饰的方法是不能被重写的?
1、带有static的方法不能被重写,因为它属于类,不属于实例。
2、带有final的方法是不能被重写的,因为它表示常量,不可被改变的。
3、带有private修饰符的方法是不能被重写的。
五、多态:
1、即同一方法可以根据发送对象的不同而采用多种不同的行为方式
2、多态存在的条件:1、有继承关系,2、子类重写父类方法,3、父类引用指向子类对象(口诀:编译看左边 --》看父类提供的方法 ;运行看右边 --》结果以右边为准)。
注意:1、多态是方法的多态,属性没有多态 2、父类和子类要有联系 ,否则会就出现类型转换异常
4、instanceof :(类型转换) ==》引用类型,判断一个对象是什么类型
4、总结:
1、父类引用指向子类对象(口诀:编译看左边 --》看父类提供的方法 ;运行看右边 --》结果以右边为准)
2、子类转父类 ==》自动转换 ,但子类可能会丢失自己原本的方法。==》称为向上转型
父类转子类 ==》强制转换 ,但父类可能会丢失被子类重写的一些方法 ==》称为向下转型
3、方便调用,减少程序的重用性,提高程序的灵活性,通用性和统一性。
五、Static关键字:
1、好处:a、随着类的加载而加载 2、全局唯一 , 全局共享 3、可以之间通过类名调用 4、静态只能调用静态,非静态可以调用随便调(也包括静态)
2、静态代码块:
1、语法:static{ //方法体 } (代码就是用一段花括号包起来的代码块)
2、在成员位置的代码块,被static修饰,只加载一次,一般用于项目初始化
拓展:
代码块 拓展:1、在成员位置的代码 ==》构造代码块 :用于提取代码的共性 ---new时就触发
2、在局部位置的代码块==》局部代码块 :用于控制变量的作用范围 --调用方法时就触发
3、在成员位置的代码,用static修饰的代码块 ==》静态代码块 :用来程序初始化 --类加载时就触发
4、执行顺序:静态代码块>构造代码块>构造方法>局部代码块
六、抽象类:
1、用abstract修饰来表示
2、abstract修饰符可以用来修饰方法也可以修饰类。如果修饰方法,则这方法就称为抽象方法;如果修饰类,则该类就称为抽象类。
3、抽象类中可以抽象方法,也可以有普通方法。
4、抽象类,不能使用new关键字来创建对象,它是用来让子类继承的。
5、抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的。
6、子类继承抽象类,那么就必须要重写抽象类中的抽象方法。没有重写抽象方法,则该子类该声明为抽象类。
7、总结:
1、不能new 这个抽象类,只能靠子类去实现,(调用时使用多态的方法)
2、抽象类中可以写普通方法
3、抽象方法必必须在抽象类中
4、子类怎么决定到底要重写那个方法?
对于普通方法:想改父类的方法,就重写,
对于抽象方法,子类要么是一个抽象类,要么就要重写父类的所有的抽象方法。
七、接口:
1、用interface关键词来表示。声明类的关键词使用class,声明接口的关键词使用interface。
2、java中的类只有单继承,但是接口可以支持多继承,多实现。
3、接口是一个特殊的抽象类,因为它的接口里面全部都是抽象方法。
4、接口里面的方法,只能靠类来实现。接口和类之间发生实现关系implements
5、接口和抽象一样,都不能new,只能靠子类实现(调用时使用多态的方法)
拓展:
1、普通类:只有具体实现。
2、抽象类:具体实现和规范(抽象方法)都有!
3、接口:只有规范!就是定义了一些规则。自己无法写方法,==》专业的约束 、约束和实现的分离:面向接口的编程