面向对象
2023-01-15 19:29:31 5 举报
AI智能生成
面向对象是一种编程范式,它以对象为中心,将数据和操作数据的方法封装在一起。在面向对象中,每个对象都有自己的属性和方法,并且可以与其他对象进行交互。这种编程范式具有高度的可重用性和灵活性,因为它允许开发人员在不同的应用程序中使用相同的代码。面向对象还可以提高代码的可维护性,因为每个对象都可以独立地修改和维护。此外,面向对象还可以提高代码的安全性,因为它限制了对数据的访问权限。总之,面向对象是一种强大的编程范式,它可以帮助开发人员编写更高效、更可靠、更易于维护的代码。
作者其他创作
大纲/内容
抽象
抽象方法
如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆盖它,那么,可以把父类的方法声明为抽象方法。
抽象类
如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰。因为无法执行抽象方法,因此这个类也必须申明为抽象类(abstract class)。
面向抽象编程本质:
1.上层代码只定义规范
2.不需要子类就可以实现业务逻辑
3.具体的业务逻辑由不同的子类实现,调用者并不关心
总结
1.通过abstract定义的方法是抽象方法,它只定义没有实现。抽象方法定义了子类必须实现的接口规范。
2.定义了抽象方法的class必须被定义为抽象方法,从抽象类继承的子类必须实现抽象方法。
3.如果不实现抽象方法,则该子类仍是一个抽象类。
4.面向抽象编程使得调用者只关心抽象方法的定义,不关心子类的具体实现。
关键词
static
static变量
static修饰的变量我们称之为静态变量
static修饰的变量我们称之为静态变量,没有用static修饰的变量称之为实例变量
静态变量是随着类加载时被完成初始化的,它在内存中仅有一个,且JVM也只会为它分配一次内存,同时类所有的实例都共享静态变量,可以直接通过类名来访问它。但是实例变量则不同,它是伴随着实例的,每创建一个实例就会产生一个实例变量,它与该实例同生共死。
把一个变量声明为静态变量通常基于以下三个目的:
1.作为共享变量使用
2.减少对象的创建
3.保留唯一副本
static方法
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
总结
1.它们仅能调用其他的static 方法。
2.它们只能访问static数据。
3.它们不能以任何方式引用this 或super
static代码块
内部类一般情况下使用不是特别多,如果需要在外部类里面定义一个内部类,通常是基于外部类和内部类有很强关联的前提下才去这么使用。
注意
1.在Java中切记:static是不允许用来修饰局部变量。
2.static final用来修饰成员变量和成员方法,可简单理解为“全局常量”
final
用来修饰一个引用
1.如果引用为基本数据类型,则该引用为常量,该值无法修改;
2.如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。
3.如果引用时类的成员变量,则必须当场赋值,否则编译会报错。
用来修饰一个方法
当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。
用来修饰类
当用final修改类时,该类成为最终类,无法被继承。简称为“断子绝孙类”。
封装
什么是封装
封装是把彼此相关数据和操作包围起来,抽象成为一个对象,变量和函数就有了归属,想要访问对象的数据只能通过已定义的接口。
说封装就是将属性私有化,太过狭隘,因为封装不仅仅实现了数据的保护,还把彼此相关联的变量和函数包围了起来。
说封装就是将属性私有化,太过狭隘,因为封装不仅仅实现了数据的保护,还把彼此相关联的变量和函数包围了起来。
作用
第一个作用:保证内部结构的安全。
第二个作用:屏蔽复杂,暴露简单。
优点
1. 提高代码的安全性。
2. 提高代码的复用性。
3. “高内聚”:封装细节,便于修改内部代码,提高可维护性。
4.简化外部调用,便于调用者使用,便于扩展和协作
原则
把不需要对外提供的成员变量封装
关键词
private概述
是一个权限修饰符
可以用来修饰成员变量和成员方法
作用
它修饰的内容只能在本类中使用,其他类中不能使用
访问
私有属性需要配合提供一对公共的访问方式--> 方法,因为在方法中可以做逻辑判断
1、设置器 setter : 为私有属性设置值
2、访问器 getter : 获取私有属性
注意
定义实体类时属性都需要私有化,并且提供一对公共的访问方式
this
概述
代表本类当前对象的引用
重点
没有static关键字的变量称为“实例变量”。
没有static关键字的方法称为“实例方法”。实例方法访问: “ 引用. ”
使用场所
1.tjis可以访问成员此案两:this变量名,既可以用来解决局部变量和成员变量重名的问题。this.name = name;
2.this可以调用成员方法:this方法名(有无参数或无参数)
3.this可以调用类的构造方法:this(有参数或者无参数)
注意:通过this在狗在函数中调用其他构造函数的时候只能定义在构造函数的第一行,并且不能相互调用
结论
在带有static的方法当中,不能“直接”访问实例变量和实例方法。
1.可以使用在实例方法当中,代表当前对象。【语法格式:this.】
2.可以使用在构造方法当中,通过当前的构造方法调用其他的构造方法
【语法格式:this(实参)】。
【语法格式:this(实参)】。
继承
什么是继承
有子类(派生类),父类(基类或超类)
Java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起父子关系
Student称为子类(派生类),People称为父类(基类或超类)
作用
当子类继承父类后,就可以直接使用父类公共的属性和方法了
好处
提高代码的复用性
特点
1.子类可以继承父类的属性和行为,但是子类不能继承父类的构造器
2.Java是单继承模式:一个类只能继承一个直接父类
3.Java不支持多继承、但是支持多层继承
4.Java中所有的类都是object类的子类
成员变量和成员方法的调用
在子类方法中访问成员(成员变量、成员方法)满足:就近原则
1.先在子类局部范围找
2.然后在子类成员范围找
3.最后在父类成员范围找,如果父类范围还没有找到则报错
4.如果子类和父类中有同名变量,根据就近原则访问的是子类的成员变量,另外也可以通过关键字来访问该成员变量(子类使用this.变量名,父类使用super.变量名)
方法的重写
什么是方法重写
在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。
作用
父类方法中的功能无法满足子类的要求,所以对父类中的方法进行重写。
另外在重写方法时@Override可以用来重写注解,其好处是:
1.@override是放在重写后的方法上,作为重写是否正确的校验注解
2.加上该注解后如果重写错误,编译阶段会出现错误提示
3.建议重写方法都加@override注解,代码安全
注意事项,要求
1.重写方法的名称、形参列表必须与被重写方法的名称和参数列表一致。
2.私有方法不能被重写。
3.子类重写父类方法时,访问权限必须大于或者等于父类(缺省<protected <public)
4.子类不能重写父类的静态方法,如果重写会报错的
特点
子类中所有的构造器默认都会先访问父类中无参的构造器,再执行自己。
为什么会这样
1.子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据
2.子类初始化之前,一定要调用父类构造器先完成父类数据空间的初始化
在子类的无参和有参构造器中默认存在super(),无论是否书写都会调用父类的构造器,并且在子类构造器执行之前执行
关键词super
概念
指的是:父类的
super可以修饰属性,可以修饰方法
在子类的方法中,可以通过 super.属性 super.方法 的方式,显示的去调用父类提供的属性,方法。
在特殊情况下,当子类和父类的属性重名时,你要想使用父类的属性,必须加上修饰符super.,只能通过super.属性来调用。
在特殊情况下,当子类和父类的方法重名时,你要想使用父类的方法,必须加上修饰符super.,只能通过super.方法来调用。
super修饰构造器
super() -->作用:调用父类的空构造器
继承中的this和super
注意点
子类通过this(...)去调用本类的其他构造器,本类其他构造器会通过super去手动调用父类的构造器,最终还是会调用父类构造器的
this(...) super(...)都只能放在构造器的第一行,所以二者不能共存在同一个构造器中
多态
概念
多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。
可以把不同的子类对象都当作父类来看,进而屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,统一调用标准。
可以把不同的子类对象都当作父类来看,进而屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,统一调用标准。
条件
1.继承:必须要有子类继承父类的继承关系。
2.重写:子类需要对父类中的一些方法进行重写,然后调用方法时就会调用子类重写的方法而不是原本父类的方法。
3..向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
特点
1.父类引用指向子类对象,如:Animal a = new Cat();
2.多态中,编译看左边,运行看右边
好处
1.多态可以让我们不用关心某个对象到底具体是什么类型,就可以使用该对象的某些方法
2.提高了程序的可扩展性和可维护性
使用
1.成员变量: 使用的是父类的
2.成员方法: 由于存在重写现象,所以使用的是子类的
静态成员: 随着类的加载而加载,谁调用就返回谁的
0 条评论
下一页