1.面向对象
-
含义:面向对象思想就是不断的创建对象(属性与行为的封装,让二者作为整体参与程序执行),使用对象,指挥对象做事情。(在已有对象的情况下,直接使用对象,而不再去考虑对象的内部构造) 面向对象的开发来讲也分为三个过程:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)
-
本质实现:通过类的形式组织代码,以对象组织数据
从现实生活来说是先有对象后有类,通过对象抽取出类,从代码来说,先有类,再有对象,设计出类后产生对应类的对象
2.类
-
组成:成员变量+成员方法
-
成员变量:所有对象所共有的特征,也叫做属性,一般是私有的,只能被类自身使用,不能通过对象调用
-
成员方法:用以实现对象的某一个行为动作,一般为公有的,可以被对象调用
3.值传递和引用传递
-
基本数据类型通过方法的形式无法改变其本身数据,因为java本身是值传递,而引用传递其实本身也是值传递,但是通过方法传递对象时,由于传递的是对象的引用,引用指向对象的地址,使用对引用进行改变的同时也会对对象进行改变
4.类与对象的创建
-
类:通过clas关键字进行声明创建
class className{ 属性 方法 }
-
对象:通过new关键字进行创建
className a=new className();
5. 构造器
-
无参构造方法:没有参数的构造方法
-
有参构造方法:有参数的构造方法
注:
-
方法名必须与类名相同
-
不能有返回值
-
当没有声明构造方法的时候,会默认生成一个无参构造方法,如果定义了构造方法之后,那么将不会生成默认的无参的构造方法
作用:在new对象时使用构造器进行初始化
6.封装
-
定义:封装就是把同一类事物的共性(包括属性和方法)归到同一类中,方便使用。封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界发生联系。也就是说用户无需知道内部的数据和方法的具体实现细节,只需根据留在外部的接口进行操作就行。
-
实现:
2.1 需要修改属性的访问控制符(修改为private); 2.2 创建getter/setter方法(用于属性的读写); 2.3 在getter/setter方法中加入属性控制语句(用于判断属性值的合法性);
-
作用:
3.1 将变化隔离
3.2 便于使用
3.3 提高重用性
3.4 提高安全性
7.继承
-
定义:一个类可以通过继承,直接获得所继承类的所有的非私有的属性和方法,并且可以在新的类中拓展新的属性和方法,被继承的类叫做父类或者超类,,新的类叫做子类,子类可以直接访问父类的非私有化成员变量,访问父类的私有化成员变量可以使用super.get()方法
注:
(1)在java中,所有的类都会继承object类
(2)java是单继承,不能进行多继承。但是可以继承多层子类(不建议继承超过3层)
(3)子类继承父类,但是对父类的成员变量是无法直接操作,只能通过父类继承过来的setter和getter方法.
-
关键字:extents
-
super:通过使用super可以访问父类的方法或者属性(非私有)注:在子类的构造器中会自动调用父类的无参构造函数(super()),如果父类没有无参构造函数,那么将会报错,如果显示的调用父类的构造方法,则super必须写在第一行,并且super只能出现在子类的方法会构造方法中,super和this不能同时调用构造方法。
-
this:调用本类的属性或者方法,super则是调用父类的属性或者方法
-
方法重写:子类重写父类的方法
注:
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大
-
非静态方法才存在重写
-
重写的方法必须是public
-
不能被final修饰
-
8.多态
注:
-
多态是方法的多态,属性没有多态
-
如果两个类不存在父子之间的关系就会出现类型转换异常
-
存在条件:继承关系,方法需要重写,声明父类引用然后指向子类对象
-
在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
9. instanceof
作用:判断两个类之间是否存在关系
注: 返回类型为布尔类型
变量 instanceof classtype
注:如果变量声明的类型与比较的类型没有父子关系那么会报错,如果有父子关系那么当声明的变量指向的对象与比较的类型有父子关系那么返回true,否则返回false
10.类型转换
-
向上转换:子类转换为父类,不用强制转换
-
向下转型:父类转换子类,需要强制转换
11.static
-
静态成员变量
-
静态成员方法(普通成员方法可以调用静态成员方法,但是静态成员方法不可以调用普通成员方法)
-
静态代码块(在类第一次加载时与类一起加载且只加载一次)
-
静态导入包(可以直接通过方法名调用)
12.抽象类
-
定义:在类前面使用abstract修饰,将该类声明为抽象类
-
特点:不能生成对象,只能new子类
-
抽象方法:是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰
注:
(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public; (2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理; (3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类; (4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);
-
注:继承抽象类的子类必须实现抽象类的所有抽象方法,抽象类中可以存在普通方法,抽象类存在构造器,抽象类无法被final修饰
13.接口
-
定义:使用interface定义接口
-
实现:使用implements实现接口
-
注:接口中所有方法都是public abstract,常量都是public static final,实现接口必须实现接口中所有方法,接口中所有的方法都是声明,而没有实现,虽然java只允许单继承,但是可以实现多个接口
14.内部类
-
成员内部类:在一个类内部定义的类,内部类可以访问外部类的所有变量
-
静态内部类:使用static修饰内部类,无法访问外部非静态变量
-
局部内部类:在方法中定义的类
-
匿名内部类:没有名字初始化类,不用将实例保存到变量中