OOA基础知识1

本文详细介绍了Java中的面向对象编程基础,包括类和对象的概念、创建与访问,以及方法的重载和重写。此外,还讨论了构造方法、继承、向上造型、方法重写的基本规则和区别,以及访问控制、静态和final关键字的应用。同时,简要提到了抽象类、接口和内部类的作用。
摘要由CSDN通过智能技术生成

一.什么是类?什么是对象?

1)现实生活中是由很多很多对象组成的,基于对象抽出了类
2)对象:软件中真实存在的单个个体/东西
类:模板/模子/类型,代表一类个体
3)类是对象的模板,对象是类的具体的实例
4)类中可以包含:
4.1)对象所共有的属性/特征-------------成员变量
4.2)对象所共有的行为/动作-------------方法
5)一个类可以创建多个对象

二.如何创建类?如何创建对象?如何访问成员?

1)定义类的方法

方法用于描述对象的行为,封装对象。

class 类名{
	修饰词 返回值类型 方法名(参数列表){
		方法体......
	}
	......
}

2)创建并使用对象
创建对象

使用new关键字创建对象,创建对象的过程称之为实例化。
语法:

new 类名( );
eg: new Student( );创建了一个学生类对象

三、方法的重载和重写

重载(Overload)

方法的重载发生在一个类中,两个方法的方法名相同,参数列表和方法体不同

重写

方法发生在派生类中,方法的方法名相同和参数列表相同,方法体不同

四、构造方法

每个类都存在构造方法,可以被重载。

1.语法结构

定义规则:

构造方法的名称必须与类相等
构造方法没有返回值,但也不能写void

语法:

[访问修饰类] 类名( ){
//构造方法体
}

初始化成员变量

构造方法常常用于实现对象成员变量的初始化。
在这里插入图片描述
this

this关键字在方法体中,用于指向调用该方法的当前对象。
一般方法的参数中定义了与类中重名的变量,方法体中的变量表示的是参数变量,加上this表示的是类中的成员变量,例如:

Student(String name,int ag

2.构造方法:构造函数、构造器、构建器-------复用代码

1)给成员变量赋初值
2)与类同名、没有返回值类型
3)创建对象时被自动调用
4)若自己不写构造方法,则默认一个无参构造方法,若自己写了,则不再默认提供
5)可以重载

3.this:指代当前对象,哪个对象调用方法就指的哪个对象

   只能用在方法中,方法中访问成员变量之前默认有个this.

this的用法:
1)this.成员变量名-------------访问成员变量
2)this.方法名()---------------调用方法
3)this()----------------------调用构造方法

4.null:表示空,没有指向任何对象

   若引用的值为null,则该引用不能再进行任何操作了
   若操作则发生NullPointerException空指针异常

五、继承

1.继承

1)作用:代码复用
2)通过extends来实现继承
3)超类:所有派生类所共有的属性和行为
派生类:派生类所特有的属性和行为
4)派生类继承超类后,派生类具有:派生类的+超类的
5)一个超类可以有多个派生类
一个派生类只能有一个超类-------单一继承
6)继承具有传递性
7)java规定:构造派生类之前必须先构造超类
----在派生类的构造中若没有调用超类构造,则默认super()调用超类无参构造
----在派生类的构造中若调用了超类构造,则不再默认提供
注意:super()调用超类构造,必须位于派生类构造的第一行

2.super:指代当前对象的超类对象

super的用法:
1)super.成员变量名-----------访问超类的成员变量
2)super.方法名()-------------调用超类的方法
3)super()--------------------调用超类的构造方法

六.向上造型:

1)超类型的引用指向派生类的对象
2)能点出来什么,看引用的类型---------这是规定,记住就可以了

七.方法的重写(Override):重新写、覆盖

1.重写

1)发生在父子类中,方法名称相同,参数列表相同,方法体不同
2)重写方法被调用时,看对象的类型-----这是规定,记住就可以了
3)重写需遵循"两同两小一大"原则-----了解,一般都是一模一样的
3.1)两同:
3.1.1)方法名称相同
3.1.2)参数列表相同
3.2)两小:
3.2.1)派生类方法的返回值类型小于或等于超类方法的
1)void时,必须相同
2)基本类型时,必须相同
3)引用类型时,小于或等于
3.2.2)派生类方法抛出的异常小于或等于超类方法的-------API异常时讲
3.3)一大:
3.3.1)派生类方法的访问权限大于或等于超类方法的

2.重写与重载的区别:------常见面试题(回答时只需回答1.1和2.1即可)

1)重写(Override):
1.1)发生在父子类中,方法名称相同,参数列表相同,方法体不同
1.2)遵循"运行期绑定",看对象的类型来调用方法
2)重载(Overload):
2.1)发生在同一类中,方法名称相同,参数列表不同,方法体不同
2.2)遵循"编译期绑定",看参数/引用的类型来绑定调用方法

八.访问控制、 static和final

1.package:

1)作用:避免类的命名冲突
2)同包中的类不能同名,类的全称:包名.类名
3)包名可以有层次结构
4)建议:包名所有字母都小写
import:
1)同包中的类可以直接访问
不同包中的类不能直接访问,若想访问有如下两种方式:
1.1)先import声明类再访问类-----建议
1.2)类的全称-------------------太繁琐,不建议

2.访问控制修饰符:-----------保护数据的安全

1)public:公开的,任何类
2)private:私有的,本类
3)protected:受保护的,本类、派生类、同包类
4)默认的:什么也不写,本类、同包类
说明:
1)类的访问权限只能是public或默认的(内部类四种都可以)
2)类中成员的访问权限如上4种都可以
3)protected与默认的主要区别在于,不同包的派生类可以继承超类受protected的修饰的成员,而不同包的派生类无法继承超类的默认的成员。

3final:最终的、不可改变的------单独应用几率低,了解即可

1)修饰变量:变量不能被改变
2)修饰方法:方法不能被重写
3)修饰类:类不能被继承

4.static:静态的

1)静态变量:
1.1)由static修饰
1.2)属于类,存储在方法区中,只有一份
1.3)常常通过类名点来访问
1.4)何时用:所有对象所共享的数据(图片、音频、视频等)
2)静态方法:
2.1)由static修饰
2.2)属于类,存储在方法区中,只有一份
2.3)常常通过类名点来访问
2.4)静态方法中没有隐式this传递,静态调用早
所以静态方法中不能直接访问实例成员
2.5)何时用:方法的操作与对象无关
2.6)静态方法不能被重写,虽然重写语法不报错但向上造型调用重写的方法得到的是父类的

3)静态块:
3.1)由static修饰
3.2)属于类的,在类被加载期间自动执行,
一个类只被加载一次,所以静态块也只执行一次
3.3)何时用:初始化/加载静态资源(图片、音频、视频等)

静态变量: 图片、音频、视频等
静态块: 给图片、音频、视频赋值
静态方法: 对图片、音频、视频的操作

Images图片工具类

九.抽象类、接口和内部类(上)

1.static final常量:应用率高

1)必须声明同时初始化
2)由类名点来访问,不能被改变
3)建议:常量名建议所有字母都大写,多个单词用_分隔
4)编译器在编译时将常量直接替换为具体的值,效率高
5)何时用:数据永远不变,并且经常使用

2.抽象方法:

1)由abstract修饰
2)只有方法的定义,没有具体的实现(连{}都没有)

3.抽象类:

1)由abstract修饰
2)包含抽象方法的类必须是抽象类
3)抽象类不能被实例化
4)抽象类是需要被继承的,派生类:
4.1)重写所有抽象方法---------变不完整为完整
4.2)也声明为抽象类-----------不常用
5)抽象类的意义:
5.1)封装派生类共有的属性和行为--------代码复用
5.2)为所有派生类提供统一的类型--------向上造型
5.3)可以包含抽象方法,为所有派生类提供统一的入口(造型之后能点出来)
派生类的具体实现不同,但入口是一致的

4.成员内部类:------应用率低,了解即可

1)类中套类,外面的称为外部类,里面的称为内部类
2)内部类通常只服务于外部类,对外不具备可见性
3)内部类对象通常是在外部类中创建的
4)内部类中可以直接访问外部类的成员(包括私有的)
内部类中有个隐式的引用指向了创建它的外部类对象
外部类名.this

5.匿名内部类:-------------优点:简化代码

1)若想创建一个类(派生类)的对象,并且对象只创建一次,
此时该类不必命名,称为匿名内部类
2)匿名内部类中不能修改外面的变量的值,因为该变量一定是final的。(匿名内部类不能改变局部变量的值,可以改变成员变量的值)

常见面试题:
问:内部类有独立的.class吗?
答:有

6.接口:

1)是一种数据类型(引用类型)
2)由interface定义
3)只能包含常量和抽象方法
4)接口不能被实例化
5)接口是需要被实现/继承的,实现/派生类:
必须重写接口中的所有抽象方法
6)一个类可以实现多个接口,用逗号分隔
若又继承又实现时,应先继承后实现
7)接口可以继承接口

设计规则:
1)将所有派生类所共有的属性和行为,抽到超类中----------抽共性
2)派生类的行为都一样,设计为普通方法
派生类的行为都不一样,设计为抽象方法
3)将部分派生类所共有的属性和行为,抽到接口中
接口是对继承的单根性的扩展----------实现多继承

十.多态:

1)意义:
1.1)同一类型的引用,指向不同的对象时,有不同的实现
----行为的多态:cut(),step(),getImage()…
1.2)同一个对象,被造型为不同的类型时,有不同的功能
----对象的多态:我,你,水…
2)向上造型/自动类型转换:
2.1)超类型的引用指向派生类的对象
2.2)能造型成为的数据类型有: 超类+所实现的接口
2.3)能点出来什么,看引用的类型
3)强制类型转换,成功的条件只有如下两种:
3.1)引用所指向的对象,就是该类型
3.2)引用所指向的对象,实现了该接口或继承了该类
4)强转时若不符合如上条件,则发生ClassCastException类型转换异常
建议:强转之前先通过instanceof来判断引用的对象是否是该类型

十一.内存管理:由JVM来管理

1)堆:
1.1)存储new出来的对象(包括实例变量)
1.2)垃圾:没有任何引用所指向的对象
垃圾回收器(GC)不定时到内存中清扫垃圾,
回收过程是透明的(看不到的),不一定一发现垃圾就立刻回收,
通过调用System.gc()建议虚拟机尽快调度GC来回收垃圾
1.3)内存泄漏:不再使用的内存还没有被及时的回收,严重的会导致系统的崩溃
建议:不再使用的内存应及时将引用设置为null
1.4)实例变量的生命周期:
创建对象时存储在堆中,对象被回收时一并被回收
2)栈:
2.1)存储正在调用方法中的所有局部变量(包括方法的参数)
2.2)调用方法时,会在栈中为该方法分配一块对应的栈帧,
栈帧中存储方法中的局部变量(包括方法的参数),
方法调用结束时,栈帧自动被清除,局部变量一并被清除
2.3)局部变量的生命周期:
调用方法时存储在栈中,方法调用结束时与栈帧一并被清除
3)方法区:
3.1)存储.class字节码文件(包括静态变量、方法)
3.2)方法只有一份,通过this来区分具体的调用对象

面向对象三大特征:----------常见面试题(你对面向对象的理解)
1.封装:
1)类:封装的是对象的属性和行为
2)方法:封装的是具体的业务逻辑功能实现
3)访问控制修饰符:封装的是具体的访问权限
2.继承:
1)作用:代码复用
2)超类:所有派生类所共有的属性和行为
接口:部分派生类所共有的属性和行为
派生类:派生类所特有的属性和行为
3)单一继承、多接口实现,具有传递性
3.多态:
1)行为的多态:所有抽象方法都是多态的
对象的多态:所有对象都是多态的
2)向上造型、强制类型转换、instanceof
3)多态的表现形式:
3.1)行为多态,通过方法的重写来表现的
3.2)对象多态,通过向上造型来表现的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值