类和对象

类是对现实生活中一类具有共同属性和行为的事物的抽象

类的特点:

  • 类是对象的数据类型
  • 类是具有相同属性和行为的一组对象的集合

类是对象的抽象,对像是类的实体
类:类是对现实生活中一类具有共同属性的行为的事物的抽象
对象:是能够看得到摸得着的真实存在的实体

对象的属性和行为

属性:

  • 对象具有的各种特征,每个对象的每个属性都拥有特定的值。(如一部手机的牌子是小米的,价格是2999,内存是128G……)(有什么)

行为:

  • 对象能够执行的操作(手机能发短信打电话)(能干什么)

    类的定义

    类的重要性:是Java程序的基本组成单位

    类的组成:属性和行为

    属性:在类中通过成员变量来体现(类中方法外的变量)(长什么样)
    行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)(能干什么)

    类的定义步骤:

    1.定义类
    2.编写类的成员变量
    3.编写类的成员方法(无static)
    image.pngimage.png

对象

创建对象

格式:类名 对象名 = new类名();
范例:Phone p = new Phone();

使用对象

1.使用成员变量

  • 格式:对象名.变量名
  • 范例:p.brand

没有赋值时输出默认值,new出来的对象开辟了堆内存,堆内存中的默认值:
整数:0
浮点数:0.0
布尔:false
字符:空字符
引用数据类型:null

2.使用成员方法

  • 格式:对象名.方法名()
  • 范例:p.call()

image.png

对象内存图

单个对象

main方法被加载到栈内存
创建对象中的“Student s” 出现在栈内存中的main方法中,“new Student()”在栈内存中为其开辟新地址,加载出类中的成员变量并赋初值。“=”:把堆内存中开辟的地址值赋值给对象S,S就可以通过地址值指向堆内存中的学生类。
main函数执行完毕后从栈内存消失。
image.png
image.png
image.png

多个对象

image.png
image.png
image.png
创建一个对象开辟一个空间,由同一个类创建的不同对象的内存地址指向不同,对象之间分离
image.png
方法是多个对象共用的,而每一个个成员变量的值是可以被对象各自更改的。

多个对象指向相同

image.png

当多个对象指向相同的时候,即地址值相同的时候,其中一个对象修改了堆内存的内容,另一个对象去访问的时候,它的内容也是改变过的。

成员变量和局部变量

image.png

image.png
堆内存中有默认的初始化值,栈内存没有默认的初始化值,必须先定义,赋值,才能使用。

封装

1.private关键字

  • 是一个权限修饰符
  • 可以修饰成员(成员变量和成员方法)
  • 作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问

image.png
image.png可以在类中对成员方法进行处理
image.png

2.this关键字

image.png
方法被哪个对象调用,哪个方法里面的this就代表哪个对象
使用this关键字调用重载的构造方法,避免相同的初始化代码,但只能在构造方法中用,并且必须位于构造方法的第一句。
this方法不能用于static方法中。
image.png
image.png
image.png
image.png
image.png

封装

image.png
get,set用法
image.png

封装的使用
image.png
image.png

构造方法

构造方法是一种特殊的方法
作用:创建对象
image.pngimage.png

构造方法的注意事项
image.png

继承

概述

继承是面向对象三大特征之一。可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。

继承的格式

  • 格式:public class 子类名 **extends**父类名{}
  • 范例:public class Zi estends Fu{}
  • Fu:是父类,也称基类,超类
  • Zi:是子类,也称派生类

继承中子类的特点

  • 子类可以得到父类的全部属性和方法(除了父类的构造方法),但不一定可以直接访问(比如:父类私有的属性和方法)
  • 子类还可以有自己特有的内容

image.png
image.png
image.png

继承的好处和弊端

好处:

  • 提高了代码的复用性(多个类相同的成员可以放到同一个类中)
  • 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)

image.png

变量访问特点

就近原则
image.png

super关键字

super关键字的用法和this关键字的用法相似

  • this:代表本类对象的引用
  • super:代表父类存储空间的标识(可以理解为本类对象的引用)

image.png
image.png
image.png

构造方法的访问特点(不太懂)

image.png

成员方法的访问特点

通过子类对象访问一个方法:

  • 子类成员范围找
  • 父类成员范围找
  • 如果没有就报错(不考虑父亲的父亲……)
  • 子父类都有时,当子类中无super关键字时,只访问子类中的方法,当子类中有super关键字时,先访问父类中的该方法,接着继续访问子类中的该方法。

image.png
image.png
image.png

super内存图(多看几遍)

方法重写

概述
子类中出现了和父类中一模一样的方法声明

方法重写的应用

当子类需要父类的功能,二功能主体子类有自己特有的内容时,可以重写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容

@Override(注解)

是一个注解
可以帮助检查重写方法的方法声明的正确性

方法重写注意事项

  • 私有方法不能被重写(父类私有成员子类是不能继承的)
  • 子类方法访问权限不能比父类的低(public>默认>私有)

    equals方法重写

继承的注意事项

  • Java中类只支持单继承,不支持多继承
  • Java中类支持多层继承

image.png正确
image.png错误

多态

概述

同一个对象,在不同时刻表现出来的不同形态

举例:
说法一:猫是猫:猫 cat = new 猫();
说法二:猫是动物:动物 animal = new 猫();
这里猫在不同的时刻表现选出了不同的形态,这就是多态

多态的前提和条件

  • 有继承/实现关系
  • 有方法重写
  • 有父类引用指向子类对象(因为主要讨论的还是对象)

(即:动物 animal = new 猫();)

多态中成员访问特点

  • 成员变量:编译看左边,执行看左边
  • 成员方法:编译看左边,执行看右边

为什么二者的访问不一样呢?
因为成员方法有重写,而成员变量没有
代码见 polymiorph_02

多态的好处和弊端

  • 好处:提高了程序的扩展性

具体体现:定义方法时,使用父类型作为参数,在将来使用的时候,使用具体的子类型参与操作

  • 弊端:不能使用子类的特有功能

转型

  • 向上转型

从子到父
父类引用指向子类对象

  • 向下转型(强转)

从父到子
父类转用为子类对象
image.png

多态内存图(见哔站)