Java学习面向对象

本文深入探讨了Java的面向对象特性,包括对象、类、抽象、继承和内存管理。面向对象的核心思想是万物皆对象,通过抽象和封装创建类。Java内存分为虚拟机栈和堆,对象在堆中创建,栈中存储引用。构造方法用于初始化对象,访问控制修饰符(如private和public)控制方法和属性的可见性。此外,文章还介绍了抽象类和抽象方法的概念,以及Java的单继承和多态性,重写和重载的规则。
摘要由CSDN通过智能技术生成

一、面向对象
首先,我们要了解面向对象,必须要了解第一件事情,java面向对象说:万事万物皆对象
我们仍置对象,是通过自己对这个世界的统一认识出发的。其中包括提前对于某个对象归属于那个类型的定义,比如说,当我们看到一个手机,由于这个手机符合我们对手机类型的全定义,所以我们叫这个东西手机
而我们创造一个相似对象的分类时,使用的"工具"叫做抽象,就是讲描述这一类对象的名词,当作对象的属性,讲描述这一类对象的动词,当作方法
具有main方法的类,叫做主类,或者场景类
關鍵字,是Java中,具有一定含义的描述词
这些描述词,不能当作变量名出现,所以我们叫这些词,关键字
其中之前我们学习的循环分支中的if,for,while,do
switch等等都是关键字
关键字在代码中的特点是,写完以后,会变成高亮
类:是用来描述对象的模板,是通过抽象和封装过程得到的
成员变量:组成类型的成员
动词定义方法
方法 格式
返回值类型 方法名(参数列表){代码块}
void:没有返回值
return:结束这个方法
返回值:离开方法的必要条件
方法里的参数是形式参数,值是实际参数

二、Java的内存
1.Java的内存分为5个部分
分别是:
程序计数器:记录程序当前执行的行数
本地方法栈:记录Native方法的执行流程
虚拟机栈:记录Java虚拟机的执行流程
堆:保持实际对象的位置
方法区:静态变量和常量以及类模型等内容所在位置
今天就研究2个区域:虚拟机栈和堆
虚拟机栈,当我们的程序,开始运行的时候,虚拟机(JVM)就叫内存已经分配好了
这个时候,JVM给我们了一小片空间,来记录当前的代码执行在那些方法中,哪些属性需要被记录,这些东西都在栈这个空间中。
但是面对对象语言,有一个特别的特征,就是需要对象去操作业务流程,而栈的大小不能满足放置很多个对象,所以我们需要将对象放置在堆中。
如果栈里面需要执行的代码,要用到堆里的对象,怎么办?
栈需要记录这个对象在堆里的位置,并不记录这个对象
什么时候在堆里面创建对象哪?什么时候,在栈里面声明引用呢?
我们把Java代码中的,这一行,拆解一下:
Iten iten = new Iten();
这一行,其实是两个动作的简写,分别是声明和赋值
声明:Iten iten;当代码执行在声明时,JVM会在栈中一个叫做栈帧的东西里面创建一个指向空白的引用(就是C语言的指针)这个空白的引用,他指向了null
赋值:当我们写了item = new Item();这个动作又能分成两个部分,第一个部分,叫做对象的创建,就是new Iten();
new这个关键字,最主要的行为,就是在堆里面,划分一片合理的内存空间,用来保存创建的对象
当我们写了=号是,这个时候,栈里面的引用,就可以和堆里面的内存空间,关联上了
抽象:例如:new一般写在创建对象的前面
访问控制,就是在创建对象以后,这个对象的属性或者方法是否可能被读取到(有些属性可能你具有,但是别人是获得不到的)
在这里插入图片描述
构造方法
方法名必须和类名一致,大小写敏感
方法不能有返回值的描述void都不能加,如果加了就报错。
这个方法一般是在new这个关键字后调用的,是用来创建这个类的对象的
如果我们不写这个方法,那么Java会给出一个没有参数,没有方法体的默认的构造方法
也就是说,任何的类中,都有构造方法
访问控制,就是在创建对象以后,这个对象的属性或者方法是否可能被读取到(有些属性可能你具有,但是别人是获得不到的)
private 私有方法,只能在本包查看,不能跨包
public 公有方法,任何人都可以查看
三、抽象:abstract
1、这个东西是一个关键字,他可以用来修饰类型和方法
2、他的意思是,指这个类型或方法是抽象的,是不知道里面如何实现的,也不用知道如何实现
3、抽象类:被abstract修饰的类型,抽象类是具有承载抽象方法的能力的类型
4、抽象方法:只知道方法的特征(方法名,返回类型,参数列表)但是不知道方法具体应该怎么实现的方法,即叫抽象方法
5、抽象方法应该使用abstract关键字来修饰
6、抽象方法不能有方法体即“{}”
四、Java继承
Java在类的范畴中只支持链式继承,单继承
里氏替换原则:在任何可以使用父类对象的位置上,都可以使用子类替换掉他
基类、超类、父类:一个意思,都是被继承的类子类、延展类、SUB类(一个意思)
子类和父类有相同的方法,优先执行子类
多态:同一种对象,表现出来的行为是不一样,属性叶不一样,同一个方法执行的结果是不一样的
子类中重新定义父类中已经定义过的方法的过程,叫做重写,重写的英文叫做override这个东西叫做注解,是一种编译方式,下面这个注解的作用是告诉编译器,eat这个方法是从父类继承过来的并且在本类中重新实现的

    重写过程中不能改变返回值类型
    重写过程中必须保证子类里面的参数列表和父类规定的参数列表要一样
    重写是需要一个继承过程的,在继承过程中,改变父类方法的实现,需要参数,否则不叫重写
    返回值和参数列表必须一样
    重写过程中可以改变访问控制,但是访问控制只能往大了改,不能往小了改
    公有的方法可以重写,私有的方法不能重写
    
    重载,重载过程是方法名一致,但是方法的参数列表从,类型、个数、顺序三个方向考量,是不一致的,这个时候,我们将这两个同名的方法叫做重载  
    重载不需要父类
    返回值不一样可以来判断重载
    参数列表不同可以来判断重载
    参数顺序不同可以来判断重载
    重载的过程中可以改变返回值

友元访问(protected):如果这个类和你那个类有关系才能访问,没有关系不能访问

继承
同包
静态(static)不能调用protected
子类可以调用protected方法

访问控制:
在这里插入图片描述
关键字

protected

继承过程中构造方法
在这里插入图片描述

构造方法不能被重写,构造方法必须和类名一致
构造方法不能继承
构造方法可以被重载

子类的构造方法在执行的时候,第一行必须执行父类的构造方法
    super();在子类中调用父类中直接父类的构造方法     
    i可以为任何值

在这里插入图片描述
this关键字和就进原则没有关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值