三大特征
封装:
封装性是面向对象思想的三大特征之一,封装就是隐藏实现细节,仅对外提供访问接口。实现细节部份包装、隐藏起来的方法。
封装有:属性的封装、方法的封装、类的封装、组件的封装、模块化封装、系统级封装…
封装的好处:模块化、信息隐藏、代码重用、插件化易于调试、具有安全性
封装的缺点:会影响执行效率
具体步骤:1将属性设为私有(private) 2 提供公开方法进行赋值与返回值 (get set)
全局变量(成员变量)与局部变量的区别:
a 在类中的位置不同
全局变量:在类中定义
局部变量:在方法中定义或者作为方法的参数
b 在内存中的位置在不同
全局变量:在堆内存(全局变量属于对象,对象存储在堆内存中 --- java对象)
局部变量:在栈内存(局部变量属于方法,方法存储在栈内存中 )
c 生命周期不同
全局变量:随着对象的创建而存在,随着对象的销毁而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
d 初始化值不同
全局变量:有默认的初始值 引用类型的默认值为null 基本数据类型 见附1
局部变量:没有默认值,必须定义,赋值,才能够正常使用
(当二者同名时,在方法中使用的时候,该方法的局部变量将取代全局变量 当想明确调用全局变量时 可用this.变量名)
继承:
继承是面向对象思想的三大特征之一
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类
1 解决代码重用问题,子类拥有父类非私有的属性、方法。
2 子类可以对父类的属性和方法进行扩展。
3 父类的构造器可以被调用,但不能被继承,可以通过super()进行调用,当父类没有默认的构造器时 1.在子类构造器第一行 通过super(属性)显示指定 2.在父类中手动写入无参构造方法 --- this(属性) 写在无参构造方法的第一行可以实现调用有参构造方法
4 创建对象会调用构造方法,调用构造方法不一定就是创建对象
Java是单继承的 允许多层继承 -----可以实现多继承(interface)
继承的好处:
a、提高代码的复用性
b、提高代码的维护性
c、让类与类之间产生关系,是多态的前提
继承的缺点:
a、增强了类与类之间的耦合性
多态:
多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性
java实现多态有三个必要条件:继承、重写、向上转型。
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法
基于继承实现的多态
继承是通过重写父类的同一方法的几个不同子类来体现的
对于引用子类的父类类型,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,
执行相同动作产生的行为也就不同。
基于接口实现的多态
指向接口的引用必须是指定这实现了该接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行对应的方法。
多态性我们大概可以分为两类:
(1)方法的重载与重写
(2)对象的多态性
//用父类的引用指向子类对象(用大的类型去接受小的类型,向上转型、自动转换)
Chicken home = new HomeChicken();
对象的多态性:
对象多态性是从继承关系中的多个类而来,
向上转型:将子类实例转为父类引用
格式:父类 父类对象 = 子类实例 ; 自动转换
以基本数据类型操作为例:int i = ‘a' ;
(因为char的容量比int小,所以可以自动完成)
向下转型:将父类实例转为子类实例
格式:子类 子类对象 = (子类)父类实例 ;强制转换
以基本数据类型操作为例:char c = (char)97;
因为整型是4个字节比char 2个字节要大,所以需要强制完成
a、方法的重载与重写就是方法的多态性表现
b、多个子类就是父类中的多种形态
c、父类引用可以指向子类对象,自动转换
d、子类对象指向父类引用需要强制转换(注意:类型不对会报异常)
e、在实际开发中尽量使用父类引用(更利于扩展)
指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。
对于面向对象而言,多态分为编译时多态和运行时多态。其中编辑时多态是静态的,主要是指方法的重载,而运行时多态是动态的,它是通过动态绑定来实现的,也就是我们所说的多态性
Java中8种基本数据类型总结 |
|||||
序号 |
数据类型 |
大小/位 |
封装类 |
默认值 |
可表示数据范围 |
1 |
byte(位) |
8 |
Byte |
0 |
-128~127 |
2 |
short(短整数) |
16 |
Short |
0 |
-32768~32767 |
3 |
int(整数) |
32 |
Integer |
0 |
-2147483648~2147483647 |
4 |
long(长整数) |
64 |
Long |
0 |
-9223372036854775808~9223372036854775807 |
5 |
float(单精度) |
32 |
Float |
0.0 |
1.4E-45~3.4028235E38 |
6 |
double(双精度) |
64 |
Double |
0.0 |
4.9E-324~1.7976931348623157E308 |
7 |
char(字符) |
16 |
Character |
空 |
0~65535 |
8 |
boolean |
8 |
Boolean |
flase |
true或false |
对象的初始化顺序:
父类静态字段初始化
父类静态代码块
子类静态字段初始化
子类静态代码块
父类普通字段初始化
父类构造代码块
父类构造函数
子类普通字段初始化
子类构造代码块
子类构造函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!