Java面向对象--1

在之前的项目当中所有方法都写在一个类里面是不是感觉很乱?

为什么会乱?------”代码冗余”-------“代码耦合

为什么要解除代码冗余和耦合?
一:让代码更’瘦’
二:让代码更之间的关系不那么’密切’

  • 使用类,帮你解决这些问题!

                   =====类将现实世界中的概念模拟到计算机程序中=====

什么是类?

  • 类其实是个模板,是一个具有共同特点的集合。比如说饮料:都有包装,都有颜色,都有味道,都是被喝的东西。这些东西都是抽象出来的属性和行为。

类的构成

类是由抽象出的属性和行为组成的对一种实物的描述,实物的属性是类的成员变量,实物的行为是类的方法。

如何创建类?

在这里插入图片描述

public 返回值类型 方法名() {
//这里编写方法的主体
}

注意:方法名(1)驼峰命名规则(2)有意义

成员变量:类中方法外。
局部变量:方法内或者方法声明上。

对象

什么是对象?

在这里插入图片描述
我们如何在代码中表示一个现实世界事物属性和行为。属性和行为是物体的模板,那么我们把这个模板进行填充,如:属性是颜色,我们把颜色填充成白色,属性是形状,我们把形状填充成圆柱体行为是点燃,那么把行为填充成燃烧红色的火焰那么我们就得出了一个结果:白色的圆柱体可以燃烧红色的火焰 得到的就是上图的蜡烛。

Java类和对象的概念

类的概念:类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。

对象的概念:现实世界中任何物体都能被当作是对象,不过在正常开发的时候通常只是在一定的范围去考虑和认识与系统相关的事物并用系统中对象抽象的表示他们。

对象和类的关系

==类是物体属性和行为的模板。
在这里插入图片描述
==对象是物体的具体实现。
在这里插入图片描述

封装

什么是封装?

  • 在面向对象程序设计方法中,封装是指一种将抽象性函数式接口的实现细节部份包装、隐藏起来的方法。
  • 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
  • 要访问该类的代码和数据,必须通过严格的接口控制。

封装的作用

  • 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
  • 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

封装的优点

一、减少耦合:
良好的封装能够减少耦合,提高系统独立性。

二。可重复性:
封装重复代码,提高软件的可重用性。

三、精确控制
可以对成员变量进行更精确的控制。

四、安全性
隐藏信息,实现细节,降低了构建大型系统的风险。

实现封装的步骤

第一步:修改属性的可见性来限制对属性的访问
在这里插入图片描述
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
—— 关键字 private


第二步:对每个值属性提供对外访问的方法
创建一对取赋值方法。
在这里插入图片描述
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
—— 关键字 this


实现封装
需求一

  • 创建动物类
  • 添加名称属性、年龄属性以及爱好属性
  • 将属性的可见性变为私有

需求二

  • 为私有的属性提供可对外访问的公共方法

修饰符

访问控制修饰符:

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。例如:默认访问修饰符、私有访问修饰符-private、公有访问修饰符-public、受保护的访问修饰符-protected


非访问修饰符:

为了实现一些其他的功能,Java 也提供了许多非访问修饰符。例如:static 修饰符、final 修饰符、abstract 修饰符、synchronized 和 volatile 修饰符

常用修饰符

访问修饰符:

  • default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法
  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
  • public : 对所有类可见。使用对象:类、接口、变量、方法
  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

非访问修饰符:

  • static 修饰符,用来修饰类方法和类变量
  • final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的
  • abstract 修饰符,用来创建抽象类和抽象方法
  • synchronized 修饰符,主要用于线程的编程,synchronized 关键字声明的方法同一时间只能被一个线程访问。synchronized 修饰符可以应用于四个访问修饰符
  • volatile 修饰符,volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

继承

继承的概念

  • 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

  • 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

继承的作用

  • 子类拥有父类的属性和方法,减少重复的代码,维护性高。
  • 代码简洁,提高了代码的复用性。

继承关键字

  • class——定义类
  • interface——定义接口
  • extends——继承父类
  • implements——实现接口

生活中的继承

在这里插入图片描述

  • 兔子和羊属于食草动物类,狮子和豹属于食肉动物类。

  • 食草动物和食肉动物又是属于动物类。

通过这两条,我们可以认为继承的逻辑为:“某个东西属于什么类型”

  • 父类更通用,子类更具体。

  • 虽然食草动物和食肉动物都是属于动物,但是两者的属- 性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。

继承的特性

  • 子类拥有父类非 private 的属性、方法
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
  • 子类可以用自己的方式实现父类的方法
  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)
  • Java 的继承是单继承,但是可以多代继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继承区别于 C++ 继承的一个特性

extends和implements的区别
相同点:

  • 都属于Java中的继承。
  • 都发生在多各类中。

不同点:

  • extends只能单继承,implements可以实现多继承。
  • extends继承父类时,父类中可以存在方法的默认实现。
    而implements在实现接口时接口中不能有方法实现。
  • extends发生在子类和父类之间,implements发生在实现类和接口之间。

继承关键字

extends关键字
在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类
在这里插入图片描述
super 与 this 关键字
super关键字:
一、我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
二、super调用构造方法时,只能是第一句
三、super不能访问父类的private成员
在这里插入图片描述
implements关键字
使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)
在这里插入图片描述

什么是包

为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

包的作用

  • 一、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用
  • 二、如同文件夹一样,包也采用了树形目录存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突
  • 三、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

创建包

两种方法
一、分别创建包和类。
二、创建类的过程中创建类所在的包。


包的命名规范

一、包名由小写字母组成,不能以圆点开头或结尾。
二、包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名。
三、包名后续部分依不同机构内部的规范不同而不同 。


JDK提供的基本包

01.java.lang
虚拟机自动引入


02.java.util
提供一些工具类


03.java.io
文件操作

包的导入

import关键字
为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用 “import” 语句可完成此功能。

01.语法
import 包名.类名


02.用 import 关键字引入,使用通配符 “*”
import java.util.*; //导入java.util包中所有类import


03.使用 import 关键字引入指定包中的指定类
import cn.world.animals; //animals指包中的animals类

注意:
类文件中可以包含任意数量的 import 声明。import 声明必须在包声明之后,类声明之前。

包的注意事项

一个类同时引用了两个来自不同包的同名类

  • 必须通过完整类名来区分

为确保规范,包名必须全小写,由域名倒置

  • 如:baidu.com,则包名为com.baidu

package和import的顺序是固定的

  • package必须位于第一行(忽略注释行)。
  • 只允许有一个package语句。
  • 其次是import。
  • 接着是类的声明。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值