面向对象总结
1.面向过程思想:一步一步的完成某个需求。侧重与过程。
2.面向对象:面向对象是基于面向过程的。侧重与结果。
3.面向对象思想特点:A.是一种更符合我们思想习惯的思想。
B.将复杂的事情的简单化
C.从执行者变成指挥者
XXX语言最基本的单位是类。
5.类与对象:类:是一组相关属性和行为的抽象事物
对象:是该类事物的具体体现
6.类的组成:成员变量、成员方法(没有static修饰)的方法
7.创建类的对象:Phonep=newPhone();
8.成员变量的使用p.变量;
9.成员方法的使用p.方法名();
10.成员变量和局部变量的区别:A:在类中的位置不同
成员变量:类中方法外
局部变量:方法内或方法声明上
B:在内存的位置不同
成员变量:在堆内存
局部变量:在栈内存
C:生命周期不同
成员变量:随着对象的存在而存在,反之消失而消失
D:初始化值
成员变量有默认初始化值
局部变量没默认初始化值,必须赋值使用
11.形式参数问题:形式参数是基本类型的,形参的改变不影响实际参数
形式参数是引用类型的,形参的改变影响实际参数
12.匿名对象:就是没有名字的对象
应用场景:A:调用方法(对象调用方法仅仅一次)
B:作为实际参数传递
13.封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:提高代码的复用性
提高代码的安全性
体现:将不需要对外提供的内容隐藏起来,对外提供公共访问方式
private:私有的意思。修饰成员变量和成员方法,被修饰的内容只能在本类中访问
XXX代表当前类的对象。
应用场景:局部变量隐藏成员变量时。
15.构造方法:作用:给对象的数据进行初始化
各式特点:A:方法名和类名相同
B:没有返回值类型
C:没有返回值
注意事项:A:操作者不提供构造方法,系统会默认自己提供无参构造B:如果操作者已经提供,系统将不再会提供
C:构造方法也是可以重载的。
16.成员方法:去掉static的方法。根据返回值类型分为:void类型非void类型根据参数列表分为:无参带参的
XXX关键字:作用:修饰成员变量和成员方法
特点:A:随着类的加载而加载
B:优先于对象存在
C:被类的多有对象共享(也是判断是否使用static的条件)D:可以通过类名调用
注意事项:A:在静态方法中没有this关键字(static是随着类的加载而加载,而this
是随着对象的创建而存在
B:静态方法只能访问静态的成员变量和成员方法
18.继承:多个类中具有相同的属性和行为时,提取出来定义到一个类中。然后多个类就和该类
有了关系,这个关系就是继承。
格式:class子类名e_tends父类名{}
父类:又称基类或超类
子类:又称派生类
19.继承的好处:A:提高了代码的复用性
B:提高了代码的维护性
C;是多态的前提
弊端:让类与类之间的关系紧密了,高耦合
开发推荐:高内聚,低耦合
特点:Java只支持单继承,可以多层继承
继承中类之间体现的是:isa的关系
注意事项:A:子类只能继承父类所有非私有的成员变量和方法
B:子类不能继承父类的构造方法,但可以通过super关键字去访问C:不要为了部分功能失去继承
继承间成员变量的关系:A:名字相同,对对应访问
B:名字不同,就近原则(子类局部--子类成员--父类成员--没有报错)
继承间成员方法的关系:同变量的关系
继承间构造方法的关系:子类中的所有构造方法都会默认访问父类的无参构造为什么呢子类继承父类,子类初始化之前,先初始化父类的。每个子类的构造方法的第一行有默认的super();假如父类没有无参构造:A:访问父类的带参构造
B:使用本类的一个构造,但必须要有子类的一个构造访问父类的构造
this(...)和super(...)必须出现在第一条语句(在后面会造成父类数据多次初始化)Super关键字:代表父类存储空间的标识(看以看成父类的对象)
this和super的区别:A:成员变量:this.成员变量本类的成员变量
Super.成员变量父类的成员变量
B:构造方法:this.(....)同上C:成员方法:this.成员方法();同上
20.代码块:在Java中,使用{}括起来的。分为局部代码块、构造代码块、静态代码块、同步代码块
局部代码块:位置:在方法中出现
作用:限定变量生命周期,及早释放,提高内存利用率
构造代码块:位置:类中方法外
作用:每次调用构造方法都执行,并且早于构造方法执行静态代码块:位置:类中方法外并加static修饰
作用:用于给类进行初始化,在加载类的时候就执行,并且就执行一次
三个代码块的执行顺序:静态代码块---构造代码块---局部代码块
21.方法重写:父类与子类中出现方法声明一模一样的情况。
方法重写(override)和方法重载(overload)的区别
方法重载在同一类中方法名相同,参数列表不同的方法,能够改变返回值类型
方法重写出现在父类与子类中方法声明一模一样的情况。不能改变注意事项:A:父类私有方法不能被重写
B:子类重写父类方法权限不能更低
C:父类静态方法,只能通过静态方法重写
XXX关键字:最终的意思,可以修饰变量、方法、类。
final修饰:变量变量不能再改动,成为常量
方法方法不能被重写
类类不能被重写
基本类型:基本类型的值不能再改动
引用类型:引用类型的地址值不能改动,地址内部的内容可以改动final的初始化时机:A:定义的时候就赋值(推荐)
B;构造方法完毕前赋值
23.多态:同一事物在不同时刻表现出不同的状态。
前提:A:有继承关系
B:有方法重写
C:父类引用指向子类对象
成员访问特点:A:成员变量编译看左边,运行看左边
B:成员方法编译看左边,运行看右边(方法重写)
C:静态成员方法编译看左边,运行看左边(静态方法为类所有)多态的好处:A:提高代码的维护性(继承)
B:提高代码的扩展性(多态)
弊端:不能访问子类特有的功能
解决方法:A:创建子类最想进行访问
B:父类引用指向子类对象
多态中的转型问题:A:向上转型子类--父类Fuf=newZi();父类引用指向子类对象
B:向下转型父类-子类Ziz=(Zi)f;父类引用转向子类对象(可能类型转换异常)
24.抽象类:有些事物无法具体表达,定义为抽象的。
特点:A:抽象类个抽象方法必须用abstract修饰
B:抽象类中不一定有抽象方法,但有抽象方法的一定是抽象类C:抽象类不能实例化(通过具体的子类实例化)
D:抽象类的子类要么是也是抽象类,要么重写抽象类的所有抽象方法。抽象类的作用:强制要求子类重写某些方法。
抽象类的成员:A:成员变量:可以是变量也可以是常量
B:构造方法:有,不能实例化,用于子类访问父类数据进行初始化C:成员方法:可以是抽象的,也可以是非抽象的
抽象类的两个小问题:
1:一个类如果没有抽象方法是否可以没有抽象方法的抽象类有什么作用答:可以,不让别人创建对象,必须通过子类创建对象。
2:abstract不能和那些修饰符共存
答:abstract修饰的方法必须通过子类重写。所以不能和
private(私有方法不能被重写),final(修饰的方法不能被重写),static和abstract共存无意义
25.接口:实际生活中,有些功能后期需要,开始没有这样Java就提供了这个功能--接口。
特点:A:定义接口必须要用interface表示。格式:interface类名{}
B:类实现接口用implements表示。格式:class类名implements接口名{}
C:接口不能实例化。由接口的具体类实例化,多态的一种(接口多态)D:接口的实现类要么是抽象类,要么重写接口中的所有方法多态的前提:A:有继承或实现关系
B:有方法重写
C:有父类引用指向子类对象或父类接口指向实现类对象
多态的分类:A:具体类多态B:抽象类多态C:接口多态
26.抽象类和接口的区别:
A:成员区别
抽象类:成员变量:可以变量也可以常量
构造方法:有
成员方法:可以是抽象的也可以是非抽象的
接口:成员变量:只能是常量(有默认修饰符publicstaticfinal)
构造方法:没有
成员方法:只能是抽象方法(有默认修饰符publicabstract)B:关系区别
类与类:继承关系,只能单继承,但可以多层继承
类与接口:实现关系,可以单实现也可以多实现,也可以在继承一个类的同时实现多个接口
接口与接口:继承关系,可以单继承也可以多继承
C:设计理念区别
抽象类被继承体现的isa的关系体现共性
接口被实现体现的是likea的关系体现扩展功能
27形式参数问题:数据类型:基本类型:byte、short、int、long、char、float、double、boolean
引用类型:数组、类、接口
A:基本类型:要的是该类型的具体数据值
返回值--基本类型返回的是也是该类的具体数据值
B:引用类型:要的是该引用类型的对象
A:类要的是该类或其子类对象(地址值)
返回值--类:返回的是该类或其子类对象(地址值)
B:抽象类要的是其子类对象(地址值)
返回值--抽象类返回的是其子类对象(地址值)
C:接口要的是其实现类对象(地址值)
返回值--接口返回其实现类对象
D:数组要的是该数据类型的数组对象
28.包:其实就是文件夹。
作用:对类进行分类管理
定义包:package包名;
注意事项:A:package定义必须在第一条有效可执行语句
B:package在一个Java文件中只能有一个
C:如果没有package,默认无名
导包:格式:import包名;
package,import,class顺序
package>import>class
仅一个可以多个可以多个
29.内部类:把类A定义到类B中,则A成为B的内部类
访问特点:A:内部类可以直接访问外部类的所有成员包括私有
B:外部类访问内部类的成员,必须创建对象
内部类位置:成员位置:成员内部类
局部位置L局部内部类
成员内部类:外界创建对象:XXX().newInner();
成员内部类的修饰:A:private为了我们访问数据的安全性
B:static为了访问数据的方便性
面试题:为什么局部内部类访问局部变量要加final修饰
因为局部变量会随着方法的调用完毕而消失,这个时候局部对象并没有立即消失,为了继续使用这个数据,加final修饰,这样存储于堆内存的是一个常量。通过反编译器查看.
匿名内部类:就是没有名字的内部类,内部类的简化写法。
前提:A:存在一个类或者借口。
B:这里的类可以是具体类也可以是抽象类。
格式:new类名或接口名(){重写方法;};
本质:是一个继承了类或者实现接口的子类匿名对象。