面向对象编程——类与对象一
程序员文章站
2024-03-16 10:48:52
...
1、面向对象三大特征
- 封装性:将客观事物封装成为抽象的类,内部操作对外部而言不可见(保护性)
- 继承性:可以实现现有类的所有功能,并在原有的基础上可进行功能上的扩展。要使用继承,必须满足is-a原则
- 多态性:指一个类实例的相同方法在不同情形下有不同的表现形式
2、类与对象的定义与使用
- 先有类,才有对象
- 类的组成:属性+方法
- 类中的属性与方法(不带static关键字的)只能通过对象调用
- 对象的产生语法:类名称 对象名称 = new 类名称();
eg:产生一个名为per的Person对象
Person per = new Person();
3、对象内存分析
- 栈内存:存放的是局部变量(各种基本数据类型、对象引用-对象名字)
- 堆内存:一般new就表示在堆上分配空间,所有方法共享此内存
- 垃圾空间:没有任何栈内存指向的堆内存空间
- 对象的引用传递:多个栈内存指向同一块堆内存
4、private实现封装
- 将属性、方法用private封装后,被封装的属性与方法只能在本类中使用,类外部不可见,从而解决属性不安全问题
- 被private修饰的方法,要想访问必须提供getter与setter方法。其中getter方法取得内容,setter方法修改内容
private不能用于外部类的封装,但可以用于内部类的封装,可以用于封装函数类的设计原则:
- 编写类的时候,没有额外说明,所有属性必须使用private封装(成员变量)
- 属性若要被外部访问,必须定义相应的getter与setter方法
5、构造方法(对类中属性初始化)
定义:构造方法是在使用关键字new实例化新的对象时调用的方法
1.Person 2.per = 3.new 4.Person();
其中:1表示类名称;2表示对象引用;3表示在堆上开辟空间;4表示构造方法(无参构造)
5.1 构造方法的特征
- 构造方法名称必须与类名称相同
- 构造方法没有返回值类型声明(eg:没有void)
- 每个类中一定至少存在一个构造方法,如果没有明确定义,系统会自动生成无参构造,若在类中自定义了构造方法,则系统不再默认生成无参构造
5.2 构造方法的重载
方法重载:方法名称相同,参数的个数或类型、顺序不同,与方法返回值无关
注意点:构造方法的重载仅限于参数个数不同
6、this关键字
-
this表示调用本类属性:就近取用原则,只要在类中访问类的属性,一定要加上this关键字
-
this表示调用本类方法:
(1) 调用普通方法:this.方法名(方法参数),明确表示调用的是本类方法,尤其是在有继承关系时
(2) 调用构造方法: this(方法参数),注意:this调用构造方法必须放在构造方法首行,且this调用构造方法不允许成环 -
this表示当前对象:当前调用的属性或方法是通过哪个对象调用的,this就指代他
7、static关键字
7.1 static变量-类属性(静态属性)
- static属性称为类属性,保存在全局数据区中,通过类名调用,与对象实例化无关,所有该类对象共享此属性值。
- 非static属性称为成员变量或对象属性,每个对象都有此属性且值都不一样
被static修饰后,其属性变为共享属性,不会再每产生一个对象被重新获得一次
注意点:
- 局部变量不能用static修饰
- static和private均不能用于外部类,内部类可以
- 一般没有明确说需要共享属性,使用非static
7.2 static方法-类方法(静态方法)
直接通过类名调用,与大型实例化无关,即没有new对象。常见于工具类方
注意点:
- 所有的static方法不允许调用非static定义的属性或方法
- 所有的非static方法允许访问static方法或属性