面向对象、继承、多态、封装、匿名内部类的基本知识点复习总结

1.面向对象
概述:一种编程思想,强调的谁来做事情,强调的是结果
面向对象的好处:1.更符合人类的思想习惯:做事情的时候先去get工具,get对象2.复杂的问题简单化3.执行者变成了指挥者
面向过程是面向对象的基础,面向对象基于面向过程

2.类和对象

类的概述:1.类就是具备某些共同特征的实体的集合2.它是一种抽象的数据类型【也是引用数据类型的一种。】3.它是对所具有相同特征实体的抽象
类的内容:1.属性:使用变量来体现事物的特征、2.行为:使用方法来体现事物的行为3.构造方法
格式:修饰符 class 类名(类描述的事物内容)
构造方法
格式:修饰符 构造方法名称(参数列表){方法体}
作用:1.创建对象2.给对象的属性赋值【有参构造赋值传进来的具体值;空参赋值对象的属性类型对应是默认值】
注意事项:1.方法名和类名一摸一样【类有自己独有的构造】2.没有返回值类型3.方法体没有return 语句4.是被jvm调用的【看到new就是调用了构造方法】
注意:在使用类描述事物的时候如果没有提供任何的构造方法,在创建事物的对象的时候系统会偷偷的补一个空参构造。有构造方法,系统就不会补充构造方法
访问对象中的内容
属性访问:就是去获取对应属性的具体的值格式:对象名.属性名
行为的访问:方法的调用【类中的方法是属于对象的调用资源】格式:对象名.方法名(参数列表)
创建对象的内存理解:创建过程
1.加载相关类信息到内存的方法去
2.调用main方法进栈并执行创建类对象相关代码
3.在栈空间开辟main方法的变量空间【存放对象的地址值】
4.jvm调用构造方法到堆空间开辟新的空间来存放对象属性具体值以及方法标记值
5.把初始的对象空间的地址值赋值给栈空间的变量。
创建对象的内存理解:访问过程
1.变量通过地址值找到对象在堆空间中的对象空间
2.通过属性名称找到对象空间对应的属性位置从而找到对应的属性值【属性的访问】
3.通过方法名称找到对象空间中的方法标记,通过方法标记找到方法区对应类的空间
4.通过方法名称找到对应的方法,并调用进栈开始执行
两个引用指向同一个对象
两个引用:栈空间中有两个变量
指向同一个对象:这两个变量空间存放的是同一个对象的地址值。
成员变量和局部变量:
1.成员变量也称全局变量:定义在属性位置的变量 局部变量:定义在方法中的变量 方法中:方法的参数列表和方法的方法体都属于方法中。比如:形式参数就是典型的局部变量
不同点:
1.定义位置不同:局部变量:在方法中 成员变量:属性位置
2.空间不同:局部变量:属于方法,执行的时候存在于栈空间。成员变量:属于对象,执行的时候存在于堆空间
3.生命周期不同 局部变量:属于方法,随着方法的调用而产生,随着方法的执行完毕就消失。成员变量:属于对象,随着对象的创建而创建,随着对象的消失而消失
4.初始化状态不同:局部变量:没有初始化值,要想使用必须先要复制才可以使用。成员变量:有初始化值,没有赋值也可以拿来使用。
常用的数据类型的默认初始化值:
引用数据类型:null、基本数据类型:整数类型:0、小数类型:0.0、布尔类型:false、字符类型:\u0000。
匿名对象的使用和理解:
概述:没有名字的对象。就是创建出来的对象没有把地址值赋值给栈空间的变量
创建格式:new 类名 (参数列表)
特点:创建出来使用完毕,就会被垃圾回收器及时的回收。下一次使用就找不到了

封装类的三大特性之一
概述:隐藏事物的属性和实现细节,对外提供统一的访问方式
好处:1.提高了代码安全性2.能够使代码的复用性提升3可以隐藏一些细节
原则:1.隐藏属性和细节2.对外提供对应的唯一访问方式。
private关键字
概述:意思是私有修饰符。范围是只能在本类中使用
修饰的内容:类、属性、方法、内部类等
getter和setter方法
概述:就是属性封装后对外提供的唯一访问方式
getter方法:外界对属性进行取值的时候要访问的方式
setter方法:外界对属性进行赋值的时候要访问的方式。
变量的访问原则和this关键字
变量的访问原则:就近原则
this关键字的定义:代表当前调用对象
用于区分局部变量和成员变量同名的情况。使用this.属性名称一定是成员变量,没有使用this.的变量,根据就近原则来确定使用那个变量
this不是一个固定的对象,他一定代表的是类的一个对象。

继承:类的三大特性之一
概述:在java中父类中的资源可以被子类使用,子类中的资源不能被父类使用;父类往往里面放的是所有子类共性的资源
关键字:extends可以把两个不相关的类产生父子关系。
格式:class类A【子类】名称extends类B【父类名称】{类A}的内容}
前提:父类必须存在
优点:1.代码的复用性提升2.有利于代码的维护性3.是多态的前提,增加代码的扩展性
缺点:类和类之间的关系变强,耦合性强【耦合性:事物和事物之间的依赖关系的程度】java开发中:低耦合,高内聚;尽量降低类之间的依赖关系,尽量使用少的对象做多的事情。
继承 关系中的成员变量:
1.字父类中属性名不同命:父类对象只可以使用父类中的变量【属性】,子类对象即能使用子类自己里面的属性也可以使用父类中的属性
2.子父类中属性名同名:父类对象只能使用父类自己的,子类对象优先使用自己的同名属性,非要使用父类的同名属性,使用关键字super来使用父类的同名属性
总结:父类永远使用的是自己的属性,子类可以使用父类和自己的。
this和super的关系:
this:代表当前调用对象
super:代表当前调用对象的父类
继承关系中构造方法的关系:
概述:父类的构造方法子类不能够继承,但是可以间接的使用。
父类的构造方法就是创建父类对象的,子类使用的时候只需要创建自己的对象就可以了,不需要创建父类的对象,不用继承父类的构造。【父类的构造子类不继承。】
在初始化子类数据之前,必须先完成对父类数据的初始化(因为在初始化子类数据的时候可能会使用到父类中的数据,所以父类必须要初始化。)
父类的构造是提供给子类调用的。
涉及案例:1.子类在创建对象的时候先初始化父类的相关数据【子类继承父类间接拥有这些数据】2.在子类的构造方法中没有去调用父类的任何构造方法,系统会默认的添加一个super()[代表弗雷德空参构造];默认访问父类的空参构造3.在子类的构造方法中调用了父类的其他构造方法(),系统就不会添加super();执行调用的父类构造。
继承关系中成员方法的关系:
1.继承关系中的方法 :方法名不相同:父类对象只能调用父类中的方法,子类对象可以调用自己的方法也可以调用父类的方法1.子类中的方法可以省略不写2.子类要更改父类同名方法的方法体。
方法的重写:在子父级继承关系中,子类中的方法的返回值类型、方法名、参数列表一摸一样,方法体不一样的方法。
方法重写的优点:可以对父类的功能进行修改或增强。
重写的注意事项
1.父类私有的方法,子类不能重写【不能继承】
2.子类重写的方法要求方法名称、参数列表、返回值类型必须和父类的对应方法一摸一样
3.子类重写方法的修饰符可以和父类的不一样【private除外】,但是权限要大于等于父类的权限。
4.父类中被final修饰的方法不能被子类重写。
重载和重写的对比:
重载:
1.同一个类中
2.方法名相同
3.参数列表相同
重写:
1.在两个类中【子父类中】
2.方法名相同
3.参数列表相同
4.返回值类型相同
5.修饰符可以不同但是子类的修饰符权限要大于等于父类的权限。
继承分类
1.单继承:一个类只能继承一个类
2.多继承:一个类可以同时继承多个类
3.多层继承:一个类A继承了类B,类B又继承了类C
4.java中类的继承:支持单继承和多层继承。

多态:类的三大特性之一
解释:一个事物的多种 状态【一个对象可以有多个数据类型】举例:一个人在学校是学生,回到家在父母面前是孩子,在儿子面前是父亲等
多态的前提:必须存在继承关系【继承和实现】
多态的特点:【一个对象可以有多种数据类型,一个数据类型可以对应不同类型的子类对象】,即父类的引用指向子类对象,父类的类型变量中存放的是子类对象的地址值。
多态的格式:父类类型 变量名 = new 子类类型(参数列表)。代码体现:就是子类对象充当父类类型。
多态中成员变量的访问原则:编译看左边【左右是以=号为基准】
解释:编译的时候先到左边的父类中去找这个变量,存在就编译通过,不存在编译报错,运行的时候只会使用父类中的资源,使用的不是父类中的资源就会报错。
多态中成员方法的访问原则:编译的时候看左边,运行的时候看右边。
解释:编译代码的时候看左边父类中是否有这个方法,有编译通过,没有编译报错。 运行的时候首先到子类中看是否有这个方法有的话执行子类的方法,没有就去执行父类的方法。【为什么不会报错,编译的时候已经判断了父类中肯定会有这个方法。】
引用数据类型的向上向下转型:
向上转型:就是子类对象赋值给父类类型的变量【多态就是向上转型。即 Animal animal =new Cat();】
向下转型:父类类型的对象赋值给子类类型的变量【多态对象回归原有的类型。】需要使用(子类类型)进行强制转换。 格式:子类类型 变量名 = (子类类型)父类类型的对象
注意事项:向下转型的时候,1.父类类型的对象肯定是一个多态对象。比如:Animal animal =new Dog(); 2.要转的子类对象必须是多态对象之前的类型。如:将animal转换为Dog,Dog dog2 = (Dog)animal;3.在向下转型的时候,需要进行判断 java中一般使用instanceof进行判断。
多态的优点:是代码的功能进行拓展 体现:主要体现在方法参数的使用

匿名内部类
概述:没有名字的类
2.匿名内部类的使用前提:匿名类:继承一个类或实现一个接口。
3.格式:new 父类类名或接口名(){父类方法的重写或者是接口方法的重写。}
4.本质:1.创建了一个类的子类对象、接口的实现类对象2.更强调关系的一种写法。

发布了29 篇原创文章 · 获赞 9 · 访问量 831

猜你喜欢

转载自blog.csdn.net/qq_41488299/article/details/104737960