Java-面向对象入门,一篇就够了!

Java面向对象

一、类与对象

对象不仅仅是你女朋友,也不仅仅是棋盘上的对象
Java是面向对象的语言,换句能听懂的话,Java可以描述现实生活的物品,这里物品也包括生命,而不单单是一些数学符号
在C语言中我们都是写简单的一些程序操作数字,一个for循环从1加到10,等等,Java也能做到。
但Java是企业级用来服务生活的,所以引入了对象的概念,对象就是生活的物品。

对象:一个对象实例,一个生活中的物品
有属性(简单理解:不能动的特征,名词)比如颜色,大小,名字。
也有行为(可以行动的,动词),例如走路,学习,吃饭。

类:抽象的 提取对象的共同特征
例如人类就是由大量人提取了共同的特征:直立行走,胎生,使用工具等一系列特征,用来描述一群人,Java类就是提取了某种对象共同特征的抽象概念
类声明:
【<修饰符>】class<类名>【extends<父类>】【implement<接口名>】

二、方法

方法:可以简单理解为c语言的函数概念
c语言中的函数是用操作数字,Java的方法就是操作对象(生活中的物品)。

构造方法(构造器)
用来创建对象的,其功能主要是完成对象的初始化。在构造方法中定义一个对象的属性和行为。
语法:{
public 类名(【参数列表】){
【语句序列】
}

构造方法的特点:

  1. 函数名与类名相同,并且构造方法不能从父类继承
  2. 不用定义返回值类型。(不同于void类型返回值,void是没有具体返回值类型;构造函数是连类型都没有)
  3. 不可以写return语句。返回值类型都没有,也就不需要return语句

成员方法:

成员方法的定义:
【方法修饰符】<方法返回值类型><方法名>(【<参数列表>】){
方法体
}

方法重载
JAVA的任何方法都允许被重载,也就是说一个类中可以有多个方法具体相同的名字,但这些方法的参数不相同,参数不同具体表现为,个数不相同或者参数的类型不相同。方法的返回类型和参数的名字不参与比较。Java系统通过传递给它的参数个数和类型来分辨具体是哪一个方法!

三、封装

目的:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。
封装将方法的可见性加以控制
也就是说你可能看不到这个方法是怎么实现功能的,只知道这个方法功能的作用。

权限修饰符

访问权限:public(公有的)>protect(保护的)>default(默认的)>private(私有的)
缺省:系统默认

修饰符同一个类同一个包子类其他包
publicyesyesyesyes
protectyesyesyesno
defaultyesyesnono
privateyesnonono

实现Java封装的步骤:
1). 修改属性的可见性来限制对属性的访问;
2).对每个值属性提供对外的公共方法访问,主要是get(获得)和set(修改)。

四、继承

父类和子类

父类和子类是相对的,子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法。
通过 extends 关键字可以声明一个类是从另外一个类继承而来的。所有的类默认继承于 java.lang.Object
例如:动物是父类,猫是子类。生命是父类,动物又是子类了,所以说父类和子类是相对的,有点像生物里的界门纲目科的关系。

要判断是不是继承关系:
只需要判断是不是is-a的关系,父类更通用,子类更具体,例如猫是动物,动物是生命。
需要注意的是Java中的方法只支持单继承,也就是一个子类只有一个父类

方法重写:
我们已经说到子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法。
这些不具有的属性或方法就是通过方法重写完成的。
重写子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。
你直接把父类的方法名复制粘贴下来,在方法体里面加上子类特有的属性或方法就好了!

方法重写和方法重载的区别

方法重载方法重写
参数列表必须修改不能修改
返回类型可以修改不能修改
异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
访问可以修改一定不能做更严格的限制(可以降低限制)
this关键字:

自己调用自己,new一个对象,你直接调用出现的是地址,而this就相当于指针,调取了这个地址存储的内容,需要注意的是,Java中this关键字不能存在于static修饰的静态方法中

主要作用:

  1. 在成员方法中可以区分成员方法和局部方法
  2. 可以返回实例对象本身的引用
  3. 可以调用本类其他的构造方法
  4. 在类的成员方法中,通过this来访问实例对象的成员变量或调用成员方法
super关键字:

子类调用父类,每一个子类的构造方法都默认调用super。
子类在继承父类,可能会出现变量隐藏和方法覆盖
变量隐藏:指子类的成员变量与父类成员变量同名,父类的成员变量被隐藏。
方法覆盖:即方法重写

如果子类需要调用或访问父类被隐藏的变量或被覆盖的方法,则使用super关键字实现。
主要作用:

  1. 访问父类被覆盖的方法
  2. 访问父类被隐藏的成员变量
  3. 调用父类的构造方法
final关键字:
  1. 声明类可以把类定义为不能继承的,即最终类;
  2. 修饰方法,该方法不能被子类重写,级最终方法;
  3. 修饰成员变量,该成员变量变为常量,不允许修改;

需要注意的是abstract和final修饰符不能同时修饰一个类

static关键字:

在类前面声明,使用此关键字使方法成为静态方法,用来提取类中的公共部分。
被static修饰的成员变量和成员方法被称为类变量和类方法!
类变量

  1. 类变量可以通过类名直接访问,而不需要创建对象
  2. 任何一个对象对类变量的修改,都是在同一个内存单元上完成的,因为,每个对象对类变量的修改都会影响其他实例变量!

类方法

  1. 类方法可以直接通过类调用,而不需要创建实例对象
  2. 类方法属于整个类,被调用时可能还没有创建任何的对象实例,因此,类方法内只可以访问类变量,而不能直接访问实例变量和实例方法!
  3. 类方法中不能使用this关键,因为静态方法不属于任何一个实例!

五、多态

多态就是同一个接口,使用不同的实例执行不同操作。
不同类的对象收到相同的消息,得到不同的结果

类的转换:
向上转型:父类引用指向子类,属于自动转换
格式:父类 类名=new 子类;
向下转型:子类引用指向父类,属于强制转换
这个是错误的:子类 类名=new 父类;
你可以说鸟是动物,但不能说动物是鸟 是一个道理!

多态也分为静态多态和动态动态
静态多态是指定义在一个类或一个函数的同名函数,它们根据参数表区别语义和执行的功能,是通过方法重载实现 的
动态多态是指定义在一个类的层次的不同类的重载函数!是通过方法重写和向上转型实现的!

六、接口

抽象类

介绍接口前需要先了解Java抽象类
抽象类:其中没有足够的信息来描绘一个具体的对象
使用abstract class来定义抽象类,抽象类不能被实例化

  1. 抽象类的定义:
    abstract class<类名>【extend<父类>】【implement<接口名>】{
    <类主体>
    }

  2. 抽象类的注意点:

  • 包含抽象方法的类一定是抽象类,但抽象类不一定必须包含抽象方法。
  • 抽象类不能被实例化。

方法的继承用exends关键字,而接口用到的关键字是interface—实现。我们已经说过Java中只支持单继承,也就是一个子类只有一个父类。为了出现多继承的特性,接口这个概念便应运而生。
一个类只能继承一个抽象类,而一个类却可以实现多个接口,但接口与接口之间还是需要使用extends关键字!

类与接口区别:
类有成员变量和成员方法,而接口却只有常量和抽象方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值