类和对象,类的继承

类与对象

  1. 类是抽象的,概念的,代表一类事物,比如人类,猫类,……是一种数据类型

  1. 对象是具体的,实际的,代表一个具体事物,是实例

  1. 类是对象的模板,对象是类的一个个体,对应一个实例

  1. 对象存在形式

属性 / 成员变量

  1. 成员变量 = 属性 = field(字段)

  1. 属性是类的一个组成部分,一般是基本数据类型,也可以是引用类型(对象,数组)

方法 / 成员方法

  1. 除了属性外,还有一些行为,就是方法

  1. 方法的定义

访问修饰符 返回数据类型 方法名(形参列表 …){ // 方法体

语句;

return 返回值;

}

  1. 形参列表:表示成员方法输入

  1. 返回数据类型:**表示成员方法输出,**void 表示没有返回值

  1. 方法名:表示为了实现某一功能代码块

  1. return 语句不是必须的

  1. 方法的使用

  1. 方法写好后,如果不去调用,不会输出

  1. 先创建对象,然后调用方法即可

  1. Person p1 = new Person();(创建对象)

  1. p1.speak();(调用speak方法(无返回值)))

  1. p1.cal01(5);(调用cal01方法(传入参数5))

  1. 方法的好处

  1. 提高代码的复用性

  1. 可以将实现的细节封装起来,然后供其他用户来调用即可

  1. 方法调用机制

  1. 底层机制

  1. 当程序执行到方法时,就会开辟一个独立的空间(栈空间)

  1. 当方法执行完毕,或者执行到 return 语句时,就会返回

  1. 返回到调用方法的地方

  1. 返回后,继续执行方法后面的代码

  1. 当 main 方法(栈)执行完毕,整个程序退出

  1. 传参机制

  1. 基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参

  1. 引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参

  1. 注意事项和使用细节

  1. 访问修饰符不写则默认访问

  1. 返回数据类型

  1. 一个方法最多有一个返回值(返回多个值 →返回数组)

  1. 返回类型可以为任意类型,包含基本类型或引用类型

  1. 如果方法要求有返回数据类型,则方法体中最后的执行语句必须为 return 值;且返回值类型必须和 return 值类型一致或兼容

  1. 如果方法是 void,则方法体中可以没有 return 语句,或者只写 return

  1. 方法名

  1. 遵循驼峰命名法,最好见名知义,表达出该功能的意思即可

  1. 形参列表

  1. 一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开

  1. 参数类型可以为任意类型,包含基本类型或引用类型

  1. 调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数

  1. 方法定义时的参数称为形式参数,简称形参;方法调用时传入的参数称为实际参数,简称实参;实参和形参的类型要一致或兼容,个数,顺序必须一致

  1. 方法体

  1. 里面写完成功能具体的语句,可以为输入,输出,变量,运算,分支,循环,方法调用

  1. 方法不能嵌套定义

  1. 方法调用细节

  1. 同一个类中的方法调用:直接调用即可

  1. 跨类中的方法A类调用B类方法:需要通过对象名调用(对象名.方法名(参数))

  1. 跨类方法调用和方法的访问修饰符有关

创建对象

  1. 先声明再创建

Cat cat;(声明对象 cat)

cat = new Cat();(创建)

  1. 直接创建

Cat cat = new Cat();

访问属性

  1. 对象名**.属性名(cat.**name;)

  1. 注意事项和细节说明

  1. 属性的定义语法同变量(访问修饰符 属性类型 属性名;)

  1. 访问修饰符:控制属性的访问范围:public,proctected,默认,private

  1. 属性的定义类型可以为任意类型,包含基本类型或引用类型

  1. 属性如果不赋值,有默认值,规则和数组一致

方法重载

  1. Java 中允许同一个类中,多个同名方法的存在,但要求形参列表不一致

  1. 重载的好处

  1. 减轻了起名的麻烦

  1. 减轻了记名的麻烦

  1. 注意事项和使用细节

  1. 方法名:必须相同

  1. 形参列表:必须不同形参类型,个数,顺序,至少有一样不同,参数名无要求

  1. 返回类型:无要求

类和对象的内存分配机制

  1. 内存结构分析

  1. 栈:一般存在基本数据类型(局部变量)

  1. 堆:存在对象(Cat,cat,数组等)

  1. 方法区:常量池(常量,比如字符串),类加载信息

  1. 创建对象的流程简单分析

  1. 先加载 Person 类信息(属性和方法信息,只会加载一次)

  1. 在堆中分配空间,进行默认初始化

  1. 把地址赋给p,p 就指向对象

  1. 进行指定初始化,比如 p.name= “ Jack ”

  1. 在栈里面修改只会修改它的指向(指向某个地址),在堆里面修改才会把 “内容” 修改

继承

  1. 定义:当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过 extends 来声明继承父类即可

  1. 继承的好处

  1. 提高代码复用性

  1. 提高代码的扩展性和维护性

  1. 继承的基本语法

class 子类 extends 父类{

}

  1. 子类就会自动拥有父类定义的属性和方法

  1. 父类又叫超类,基类

  1. 子类又叫派生类

  1. 注意事项和细节

  1. 子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问,但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问

  1. 子类必须调用父类的构造器,完成父类的初始化

  1. 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中使用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则编译不会通过

  1. 如果希望指定去调用父类的某个构造器,则需要显示调用

  1. super 在使用时,需要放在 构造器第一行

  1. super()和this()都只能放在构造器第一行,因此这两个方法不能共存在一个构造器

  1. 父类构造器的调用不限于直接父类,将一直往上追溯到 Object 类

  1. 子类最多只能继承一个父类(单继承),

  1. 不能滥用继承,子类和父类之间必须满足 is-a 的逻辑关系

  1. 继承的本质分析

  1. 当子类对象创建好后,建立查找的关系

  1. 首先看子类是否有该属性

  1. 如果子类有该属性,并且可以访问,则返回信息

  1. 如果子类没有这个属性,就看父类有没有这个属性(如果父类有这个属性,并且可以访问,就返回信息)

  1. 如果父类没有就按照(3)的规则,继续找上级父类,直到Object

  1. 继承设计的基本思想

  1. 父类的构造器完成父类属性初始化

  1. 子类的构造器完成子类属性初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天之泪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值