类和对象
类的特点:
- 类是对象的数据类型
- 类是具有相同属性和行为的一组对象的集合
类是对象的抽象,对像是类的实体
类:类是对现实生活中一类具有共同属性的行为的事物的抽象
对象:是能够看得到摸得着的真实存在的实体
对象的属性和行为
属性:
- 对象具有的各种特征,每个对象的每个属性都拥有特定的值。(如一部手机的牌子是小米的,价格是2999,内存是128G……)(有什么)
行为:
- 对象能够执行的操作(手机能发短信打电话)(能干什么)
类的定义
类的重要性:是Java程序的基本组成单位类的组成:属性和行为
属性:在类中通过成员变量来体现(类中方法外的变量)(长什么样)
行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)(能干什么)类的定义步骤:
1.定义类
2.编写类的成员变量
3.编写类的成员方法(无static)
对象
创建对象
格式:类名 对象名 = new类名();
范例:Phone p = new Phone();
使用对象
1.使用成员变量
- 格式:对象名.变量名
- 范例:p.brand
没有赋值时输出默认值,new出来的对象开辟了堆内存,堆内存中的默认值:
整数:0
浮点数:0.0
布尔:false
字符:空字符
引用数据类型:null
2.使用成员方法
- 格式:对象名.方法名()
- 范例:p.call()
对象内存图
单个对象
main方法被加载到栈内存
创建对象中的“Student s” 出现在栈内存中的main方法中,“new Student()”在栈内存中为其开辟新地址,加载出类中的成员变量并赋初值。“=”:把堆内存中开辟的地址值赋值给对象S,S就可以通过地址值指向堆内存中的学生类。
main函数执行完毕后从栈内存消失。
多个对象
创建一个对象开辟一个空间,由同一个类创建的不同对象的内存地址指向不同,对象之间分离
方法是多个对象共用的,而每一个个成员变量的值是可以被对象各自更改的。
多个对象指向相同
当多个对象指向相同的时候,即地址值相同的时候,其中一个对象修改了堆内存的内容,另一个对象去访问的时候,它的内容也是改变过的。
成员变量和局部变量
堆内存中有默认的初始化值,栈内存没有默认的初始化值,必须先定义,赋值,才能使用。
封装
1.private关键字
- 是一个权限修饰符
- 可以修饰成员(成员变量和成员方法)
- 作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问
2.this关键字
方法被哪个对象调用,哪个方法里面的this就代表哪个对象
使用this关键字调用重载的构造方法,避免相同的初始化代码,但只能在构造方法中用,并且必须位于构造方法的第一句。
this方法不能用于static方法中。
封装
封装的使用
构造方法
构造方法是一种特殊的方法
作用:创建对象
继承
概述
继承是面向对象三大特征之一。可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
继承的格式
- 格式:public class 子类名 **extends**父类名{}
- 范例:public class Zi estends Fu{}
- Fu:是父类,也称基类,超类
- Zi:是子类,也称派生类
继承中子类的特点
- 子类可以得到父类的全部属性和方法(除了父类的构造方法),但不一定可以直接访问(比如:父类私有的属性和方法)
- 子类还可以有自己特有的内容
继承的好处和弊端
好处:
- 提高了代码的复用性(多个类相同的成员可以放到同一个类中)
- 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
变量访问特点
super关键字
super关键字的用法和this关键字的用法相似
- this:代表本类对象的引用
- super:代表父类存储空间的标识(可以理解为本类对象的引用)
构造方法的访问特点(不太懂)
成员方法的访问特点
通过子类对象访问一个方法:
- 子类成员范围找
- 父类成员范围找
- 如果没有就报错(不考虑父亲的父亲……)
- 子父类都有时,当子类中无super关键字时,只访问子类中的方法,当子类中有super关键字时,先访问父类中的该方法,接着继续访问子类中的该方法。
super内存图(多看几遍)
方法重写
概述
子类中出现了和父类中一模一样的方法声明
方法重写的应用
当子类需要父类的功能,二功能主体子类有自己特有的内容时,可以重写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容
@Override(注解)
是一个注解
可以帮助检查重写方法的方法声明的正确性
方法重写注意事项
继承的注意事项
- Java中类只支持单继承,不支持多继承
- Java中类支持多层继承
正确
错误
多态
概述
同一个对象,在不同时刻表现出来的不同形态
举例:
说法一:猫是猫:猫 cat = new 猫();
说法二:猫是动物:动物 animal = new 猫();
这里猫在不同的时刻表现选出了不同的形态,这就是多态
多态的前提和条件
- 有继承/实现关系
- 有方法重写
- 有父类引用指向子类对象(因为主要讨论的还是对象)
(即:动物 animal = new 猫();)
多态中成员访问特点
- 成员变量:编译看左边,执行看左边
- 成员方法:编译看左边,执行看右边
为什么二者的访问不一样呢?
因为成员方法有重写,而成员变量没有
代码见 polymiorph_02
多态的好处和弊端
- 好处:提高了程序的扩展性
具体体现:定义方法时,使用父类型作为参数,在将来使用的时候,使用具体的子类型参与操作
- 弊端:不能使用子类的特有功能
转型
- 向上转型
从子到父
父类引用指向子类对象
- 向下转型(强转)