面向对象核心
2017-03-12 23:34:12 0 举报
AI智能生成
面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件和结构化代码。其核心概念包括封装、继承和多态。封装是将数据和操作数据的方法绑定在一起,形成一个独立的对象。继承是子类可以继承父类的属性和方法,实现代码的重用。多态是指不同对象对同一消息做出响应的方式不同,增强了程序的灵活性和扩展性。此外,还有抽象、接口、构造函数、析构函数等重要概念。面向对象编程的主要优点是提高了代码的可读性、可维护性和可重用性,降低了软件的开发和维护成本。
作者其他创作
大纲/内容
面向对象三大特性之——封装
意义:1.封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
2.要访问该类的代码和数据,必须通过严格的接口控制。
3.封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
4.适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
如何实现
1.修改属性的可见性来限制对属性的访问(一般限制为private)public class Person {
private String name;
private String gender;
private int age;
}
这段代码中,将 name、age 和gender属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问。
this关键字
this 关键字用于指向调用该方法的当前对象;简单来说,那个对象调用方法,this指的就是那个对象。
注意:上述实例中public方法是外部类访问该类成员变量的入口(接口)。
通常情况下,这些方法被称为getter和setter方法。
因此,任何要访问类中私有成员变量的类必须通过这些getter和setter方法。
我们除了使用setter方法来给被封装的成员变量赋值外,是否还有其他的方式可以做到这一点呢?
可以通过构造方法来给被封装的成员变量进行赋值
构造方法
两点规则:构造方法必须与类名相同。构造方法没有返回值,但也不能写void
构造方法的作用:完成对象的创建,即完成对象的实例化,一般使用构造器来完成对成员变量的初始化。
开发时,没有明确写出构造方法,编译器会自动增加一个构造器“默认构造器”相反,若手写了若干个构造器,就不会自动产生空构造器。
代码块
在Java中,使用{}括起来的代码被称为代码块。
根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)。
常见代码块:
1:局部代码块
在方法中出现;限定变量生命周期,及早释放,提高内存利用率
2:构造代码块 (初始化块)
在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造器都会被执行,并且在构造方法前执行
3:静态代码块
在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。一般用于加载驱动
在代码块的执行顺序上 静态代码块>构造代码块>构造函数
面向对象三大特性之——继承
继承(extends)概念:
让类与类之间产生关系,子父类关系
继承的好处:
a:提高了代码的复用性
b:提高了代码的维护性
c:让类与类之间产生了关系,是多态的前提
继承的弊端:
类的耦合性增强了
开发的原则:高内聚,低耦合
耦合:类与类的关系
内聚:就是自己完成某件事情的能力
在java程序中要实现两个类之间的继承关系就必须使用extends关键字来实现。
特性:
子类拥有父类非private的属性,方法。
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
子类可以用自己的方式实现父类的方法。
注意:
a:子类只能继承父类所有非私有的成员(成员方法和成员变量)
b:子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法
c:不要为了部分功能而去继承
super关键字
代表父类的内存空间标识
方法的重写
外壳不变,核心重写!
注意事项
a:父类中私有方法不能被重写
* 因为父类私有方法子类根本就无法继承
b:子类重写父类方法时,访问权限不能更低
* 最好就一致
c:父类静态方法,子类也必须通过静态方法进行重写
新增:声明为final的方法不能被重写,声明为static的方法不能被重写,但能被再次声明。
super与this的区别
this调用本类的成员变量也可以调用父类的,调用本类的构造方法,调用本类的成员方法,也可调用父类成员方法
super调用父类的成员变量,构造方法,成员方法
重写是父类与子类之间的多态性的一种表现,重载是一类中多态性的一种表现
final修饰的类是最终类,方法是最终方法,修饰的变量是常量,只能被赋值一次,被final修饰的常量名字母都大写多词用“_“连接,可以通过构造代码块或构造函数赋值一次。(基本类型,值不能被改变,引用类型,地址不能被改变,对象属性能改变)
抽象类
残缺不全的类,即类中没有包含足够的信息来描绘一个具体的对象
特点:不能实例化,其他功能依旧存在
抽象类必须被继承,才能使用
任何子类必须重写父类的抽象方法,或者声明自身为抽象类,继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。
1、一般类可以具体的描述事物。抽象类描述事物的信息不具体
2、抽象类中可以多定义一个成员:抽象函数。
3、一般类可以创建对象,而抽象类不能创建对象。
4、抽象类中是可以不定义抽象方法,不让该类创建对象,不让别的类建立该抽象类对象。
抽象关键字abstract不可以和final,private,static共存。
接口
是抽象方法的集合,用interface来声明。类是描述对象的属性方法。接口是则包含类要实现的方法
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法,接口无法被实例化,可以被实现。实现类必须描述所有方法否则要声明为抽象类
特性:
接口中方法是隐式抽象的(public abstract)、接口中可以含有变量(public static final)、方法中不能在接口实现(须通过实现类来实现)
隐世特征:
声明接口,方法,(变量)时不必使用abstract(static final)、接口中的方法都是公有的
重写与实现
重写
类在实现接口的方法时,不能抛出强制异常,只能在接口中,或者继承接口的抽象类中抛出强制性异常
重写时保证外壳一致
若实现接口的类是抽象类,没必要实现该接口的方法
实现
一个类可以实现多个接口,但只能继承一个类,能继承另一个接口
多态
同一种行为具有不同的表现形式、同一接口使用不同的不同的实例而执行不同的操作(如:黑白和彩色打印机)、不同的对象对同一行为作出的不同响应
三大条件
要有继承,或实现
要有重写
父类引用指向子类对象
Java中方法重载的规则
1.方法名必须相同
2.必须具有不同的参数列表
3.可以有不同的返回类型,只要参数列表不同即可
4.可以有不同的访问修饰符
子主题
5.可以抛出不同的异常
6.方法重载只能发生在同一各类中
方法重载的意义
重载是一种十分友好的功能,它不要求你在调用一个方法之前转换数据类型,它会自动地寻找匹配的方法;重载对于编写结构清晰而简洁的类有很大的作用。
面向对象编程(OOP:Object-OrientedProgramming )
面向对象编程思想实际上就是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。
创建对象的步骤
Student s = new Student();
1,Student.class加载进内存
2,声明一个Student类型引用s
3,在堆内存创建对象
4,给对象中属性默认初始化值
5,属性进行显示初始化
6,构造方法进栈,对对象中的属性赋值,构造方法弹栈
7,将对象的地址值赋值给s
static关键字
概念:static用于修饰类的成员,如成员变量,成员方法,代码块,被static修饰的成员具备一些特殊性。
特殊性:
a:随着类的加载而加载,b:优先于对象存在,c:被类的所有对象共享
d:可以通过类名调用
它本身也可以通过对象名调用。
推荐使用类名调用。
静态修饰的内容一般我们称其为:与类相关的,类成员
注意事项:
a:在静态方法中是没有this关键字的
b:静态方法只能访问静态的成员变量和静态的成员方法
静态变量和成员变量的区别:
A:所属不同
静态变量属于类,所以也称为为类变量
成员变量属于对象,所以也称为实例变量(对象变量)
B:内存中位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存
C:内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失
D:调用不同
静态变量可以通过类名调用,也可以通过对象调用
成员变量只能通过对象名调用
接口与类的:
相似点:
一个接口可以有多个方法,相应的文件存储,并且名称的对应性
不同的:
接口不能用于实例化对象,没有构造方法,方法必须是抽象方法,不能包含成员变量(static,final除外),不能被继承要被实现,支持多重继承。
接口与抽象类的区别
抽象类中的方法可以有方法体。其成员变量可以使各类型的,接口中只能是public static final。接口中不能有静态代码块以及静态方法,一个类只能继承一个抽象类,可实现多接口。
抽象类是对类的抽象对整体的抽象,接口是对行为的抽象
继承是“是不是”的关系,接口是“有没有”得关系。海豚是否具有飞行的这个特点,能就是实现接口,不能就是不能实现接口。
抽象类是一种模板设计,例如PPT中的模板。而接口是辐射式设计,如警报器更新,须全部更新。
0 条评论
下一页