首页 > 编程语言 >【Java】梳理总结:类与对象|面向对象三大特征|接口 抽象类

【Java】梳理总结:类与对象|面向对象三大特征|接口 抽象类

时间:2024-03-18 19:03:26浏览次数:15  
标签:Java 变量 子类 接口 抽象类 父类 方法 三大

目录

一、类与对象

1、 面向对象和面向过程

面向过程:侧重的是过程

面向对象:侧重的是对象

2、 类与对象

1、造车

2、面向对象的世界里:

3、写代码:

3、方法/函数重载

4、构造方法(构造方法的重载)

1、无参构造

2、有参构造

3、构造方法也是方法,也可以进行重载

5、this关键字

6、局部变量 成员变量

7、修饰符

1、访问修饰符 可以修饰成员变量、成员方法、类

2、非访问修饰符 static final

2.1、static 静态(共享)不需要创建对象,直接类名调用

2.2、final 常量、最终类(不能被继承,被绝育了)用于修饰类、属性和方法

2.3、abstract 抽象

二、面向对象的三大特征

一、封装(把代码放入方法)

成员变量一般使用private来声明,保护成员变量不被胡乱的赋值,所以不能随便访问,这时候需要getter setter

setter:主要是给成员变量赋值,做一定的保护,即判断限制的逻辑代码

getter:从成员变量中获取数据

二、继承

三、多态

1、把子类的对象赋值给父类的引用/变量——向上转型 —— Animal ani = new Cat()

2、把父类的对象(变量)转化为子类的变量——向下转型 ——在1的基础上,Cat cat1 = Cat(ani)

 四、重写(在继承 多态中常用)

1、前提条件:继承或者实现

2、语法:子类对父类中提供的方法进行重新定义

3、作用:方法升级。父类方法无法满足子类的需求

三、接口 抽象类

1、抽象类(现实中不存在的东西)

1、抽象方法:

2、抽象类:

3、特点:

4、作用:

5、抽象类是不允许用final修饰的

2、接口

1、特点:

2、接口同样具有多态性

3、接口与接口的关系:多继承(一个接口可以同时继承多个接口)

4、总结:

3、对比一下抽象类与接口

4、 举例:


一、类与对象

1、 面向对象和面向过程

面向过程:侧重的是过程
  • 优点:简单

  • 缺点:代码量大了之后,维护性非常差

面向对象:侧重的是对象

你是上帝视角 你创建一个大象 告诉大象,进冰箱

  • 优点:可扩展性非常强,维护成本低

  • 缺点:新手上手难

2、 类与对象

1、造车
  • 1.画图纸

    定义车的属性信息:color speed seat

    定义车的动作:跑

  • 2.拿着图纸找工厂生产车

2、面向对象的世界里:
  • 类:就是图纸
  • 属性:这一类事物拥有的共同属性
  • 动作:这一类事物共同能执行的功能
  • 对象:使用类创建的具体的某一个东西
  • 对象能干什么?——完全取决于类是如何定义的
3、写代码:
  • 类:使用class定义
  • 属性:成员变量来描述,直接写在类中的变量
  • 动作:成员方法,不写static就是成员方法
  • 创建对象:类 引用(变量) = new 类名(); “=“前后 相当于int a = 10
  • 调用成员方法:对象/引用.方法()
  • 类型 变量——在面向对象的世界里,变量是没有市场的,这种变量被称为引用

3、方法/函数重载

  • 重载规则:方法名一样,参数不一样,与返回值无关 ,返回值必须相同;

  • 重载研究的是同类中的方法,唯一一样的就是方法名和返回值

    • 1、参数的个数不一样

    • 2、参数的类型不一样

    • 3、参数个数一样,类型也一样,但是顺序不一样

  • 普通方法和构造方法都能重载
  • 在执行的时候,程序会自动的根据你给的参数去找对应的方法,执行
  • 重载作用:可以让我们省去起名字的烦恼

4、构造方法(构造方法的重载)

构造方法:在创建对象时候,自动调用的方法

语法:

public 类名(传参){

}

注意:

1、没有返回值这一项

2、在我们new的时候,自动调用构造方法

作用:在创建对象的时候,给对象设置属性信息

1、无参构造

Java会默认自动的赠送给每一个类一个无参数的构造方法

但是如果自己写了构造方法 java就不再赠送了——即

⚠️如果只写有参构造,不写无参构造,那么java不赠送无参构造,这时候如果有其他地方需要用到无参构造 创建对象...的时候就会报错

⚠️所以一般时候我们这样:要么不写任何构造(这时候有默认赠送的无参构造);要么有参、无参一起写(避免不赠送无参带来的报错)

2、有参构造

一般情况参数和成员变量保持一致;除了创建对象之外,一般情况用来给成员变量赋值

3、构造方法也是方法,也可以进行重载

作用:可以有更多的方式去创建对象 即多个构造方法

但是因为构造方法们可能有重复的东西,那么使用this(......)可以访问当前类中其他的构造方法

5、this关键字

this:指向当前类 表示当前类的对象

this 可以在方法内部获取到对象中的属性信息

this 还可以区分局部变量和成员变量

变量的查找顺序:先找自己方法内的,如果自己没有,就去this里面找

java中允许成员变量和局部变量同名 但是引用变量会有就近原则的问题,那么引入this

作用:

1、用this关键字,可以解决成员变量和局部变量同名的问题

2、this表示当前对象

6、局部变量 成员变量

局部变量和成员变量的区别:

成员变量:方法外部,类内部定义的变量

局部变量:类的方法中的变量,方法的参数中或者里面

成员变量局部变量
作用域针对整个类有效在方法内部有效
生命周期随着对象的创建而存在,随着对象的消失而消失当方法调用完,或者语句结束后,就自动释放
初始值有默认初始值没有默认初始值,使用前必须赋值
内存中位置成员变量属于对象,进堆内存局部变量属于方法,进栈内存

7、修饰符

1、访问修饰符 可以修饰成员变量、成员方法、类

public 、protected 、默认修饰符default、 private——权限逐步降低。

public的访问权限最大,private类型的访问权限最小

  • public 公共的: 所有类都可以访问

  • protected 受保护的:主要是给子类用的;同一个包下都可以访问,不同包下子类访问;

  • default默认的,啥也不写: 包访问权限 在自己包内可以随意访问 默认不写;如果不在一个包内,即使继承关系也是不能访问的。

  • private 私有的 只有类自己能用

  • 用的最多的是private和public

2、非访问修饰符 static final

2.1、static 静态(共享)不需要创建对象,直接类名调用

        —— 一般和业务没什么关系的 工具类用到static

        ——static所有对象共享 跟着类走;即一个对象改了static修饰的变量,其他对象的该变量都变了

2.2、final 常量、最终类(不能被继承,被绝育了)用于修饰类、属性和方法
  • 被final修饰的类不可以被继承

  • 被final修饰的方法不可以被重写

  • 被final修饰的变量不可以被改变⚠️又被称为常量

    ⚠️被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的;

  •  final如果修饰基本数据类型,被初始化之后其值不能够再改变;

  • 如果修饰的是引用,其引用不可变,但是引用的对象内容可变,就是引用不能够变成其他的引用,但是引用的对象内容可变。

2.3、abstract 抽象

二、面向对象的三大特征

三大特征都是为了少些代码、少修改代码。

一、封装(把代码放入方法)

核心思想是隐藏细节 ——引出get set

意思是将代码通过函数的形式将一些代码细节包装起来,防止外部代码的随机访问,要访问这些数据就必须通过调用函数来完成。

1、好处: 提高了代码的阅读性 提高了代码的可维护性

2、体现:方法、对象、private get/set

成员变量一般使用private来声明,保护成员变量不被胡乱的赋值,所以不能随便访问,这时候需要getter setter

get/set和构造方法都可以对成员变量进行赋值。

setter:主要是给成员变量赋值,做一定的保护,即判断限制的逻辑代码

getter:从成员变量中获取数据

idea生成方式:idea空白位置 -> 右键 -> generate -> getter and setter -> 全选 -> OK

二、继承

生活中的继承:子承父业。

java中继承:当出现X是一种y的时候,x就可以继承y,比如黑熊怪是一种妖怪

java中的继承:两个类之间通过extends关键字来描述父子关系,子类便可拥有父类(爷爷类)的非私有成员。子类可以自动拥有父类中除了私有内容外的其他所有内容

解决问题:

  • 提高了代码复用性
  • 代码的维护性更高
  • 简化代码的开发
  • 子类对父类进行了扩展

语法: 

public class 父类 {}   
public class 子类 extends 父类 {}

注意事项:

1、如果一个类不继承任何类,默认继承Object, Object是java中的祖宗类。

2、Java是单继承(一个类只能继承于一个类),多层继承,一个父类可以有多个子类。

3、创建本类对象之前会先初始化父类对象

4、子类不能继承父类的private成员(属性,方法)子类也可以有自己的东西,即子类对父类进行了扩展

三、多态

多态:同一个对象拥有多种形态 ——比如猫它是一只猫,还是动物

作用把不同的数据类型进行统一,让程序具有超强的可扩展性——比如猫、狗、大象,都是动物,人去喂动物

好处:扩展性变强了, 方法的参数 用一个变量接收所有的子类对象,解决了代码复用

弊端:不能直接调用子类的特有方法 非要调用可以用强转的方式

分析:猫是一动物,继承动物,可以把猫当成动物来看

Cat extends Animal
  
Cat c = new Cat()//创建一只猫,把它赋值给猫类型的变量(引用)c

Animal ani = new Cat()//可以把猫当成动物来看,把子类的对象赋值给父类的引用(变量)
//——向上转型,会屏蔽掉子类中特有的方法,比如抓老鼠,站在动物的角度,不能抓老鼠
  
Cat cat1 = Cat(ani)//向下转型

tips⚠️:

1、把子类的对象赋值给父类的引用/变量——向上转型 —— Animal ani = new Cat()

——缺点:会屏蔽掉子类中特有的方法;

——子类和父类一样的方法,使用子类的方法

2、把父类的对象(变量)转化为子类的变量——向下转型 ——在1的基础上,Cat cat1 = Cat(ani)

向下转型可能会有风险,java要求必须要写强制类型转换:(转换之后的数据类型)变量

引用数据类型的强转 :把父类的对象转换成子类的变量(向下转型) 强转的两者之间要有继承关系

 四、重写(在继承 多态中常用)

1、前提条件:继承或者实现
  • 重写研究的是类与类之间的关系,也可以是类和接口之间的关系
  • 子父类(接口实现)出现了一模一样的方法,升级或者改造父类的方法
2、语法:子类对父类中提供的方法进行重新定义
  • 子父类中出现了一模一样的方法。

  • 修饰符、返回值、方法名、参数都必须一模一样。

  • 子类和父类中的方法的声明完全一致

3、作用:方法升级。父类方法无法满足子类的需求

重写又被称为方法的覆盖

super可以调用父类中被重写了的方法,半盖

三、接口 抽象类

1、抽象类(现实中不存在的东西)

在Java中的抽象:只声明,不实现

1、抽象方法

被abstract修饰的方法,就是抽象方法;抽象方法没有方法体{},直接;结束

2、抽象类

类中如果有抽象方法,那么这个类就是抽象类,但抽象类中不一定都是抽象方法,可以有正常方法(非抽象)

3、特点:

1、抽象类不可以创建对象

2、抽象类的子类必须重写父类中的抽象方法,否则子类必须也是抽象类(因为会继承父类中的抽象方法)

4、作用:

通过抽象类可以强制的要求子类中必须有哪些方法,规范子类的动作

5、抽象类是不允许用final修饰的

抽象类的定义目的是类不允许直接实例化,必须被继承重写。

而final修饰符的概念正好相反,final修饰的类是不允许被继承的,只能被new实例化。

因此抽象类和final是矛盾的。

2、接口

1、特点:

  1. 接口实际上是一种特殊的抽象类
  2. 接口中所有的方法都是抽象方法,可以参略掉abstract,不可以有正常的方法
  3. 接口使用interface来声明,不再是类了
  4. 接口中所有的内容(包括方法)都是公开的,公共的,所以public和abstract都可以省略
  5. 能继承接口的只能是接口
  6. 接口和类只能是实现关系 implements
  7. 接口中所有的变量都是全局,静态常量
  8. 如果类实现接口,那么类一定要实现(重写)接口中的所有抽象方法,重写成非抽象的
  9. 除非类是抽象类,那么不用全部实现,因为抽象类中允许有抽象方法的存在!
  10. 接口只有两部分组成:全局常量、抽象方法

2、接口同样具有多态性

接口可以把很多不相干的内容进行整合(多态),比如熊猫、金子都是值钱的东西,但是它们本身不是一类东西

类只能单继承,一个类只能继承一个父类,实现多个接口

接口支持多实现,一个类可以实现多个接口

3、接口与接口的关系:多继承(一个接口可以同时继承多个接口)

  • 类和类的关系:单继承

  • 类和接口的关系:多实现

  • 接口和接口的关系:多继承

    当继承与实现都存在的时候先继承再实现

4、总结:

接口:就是去定义功能

实现类:必须实现接口中的功能

抽象类:搞定接口中的一部分东西

3、对比一下抽象类与接口

4、 举例:

父接口中的抽象方法就是规则,为什么呢?因为规范返回值、参数类型、方法名

public interface Inter {
	//抽象方法没有方法体。
	public abstract int show();			//规则1
	
	void print(int a);					//规则2
}
 

//类实现接口
public class Imp implements Inter {

	public int show() {			//遵循了规则1	重写
		//...任意代码	
	}
	
	public void print(int a) {	//遵循了规则2	重写
		//...任意代码	
	}
}
	
抽象类:不能创建对象的类(不能new),与普通类的唯一区别是可以用抽象方法。
       子类可以继承抽象类,但必须重写抽象方法。
abstract 定义一个抽象类。	
  
public abstract class BaseCase {

	public BaseCase() {}
	
	public abstract void info();
	
	public void getData() {
		System.out.println("getData...");
	}
}

标签:Java,变量,子类,接口,抽象类,父类,方法,三大
From: https://blog.csdn.net/weixin_40772077/article/details/136736769

相关文章

  • Java-虚拟机
    Java内存区域详解运行时数据区域结构图:线程共享区域堆区存放常量池、实例对象等公共元素,所有线程共享。整个内存模块分新生代和年老代,新生代区分Eden、fromSurvivor和toSurvivor。Java虚拟机所管理的内存中最大的一块,Java堆是所有线程共享的一块内存区域,在虚拟机启动时......
  • JSX(JavaScript XML)语法
    1.在script标签中使用JSX语法需要:使用babel在script标签上添加:type="text/babel"2.JSX中的注释使用//、/**/使用{/**/}3.嵌入数据情况一:当变量是Number、String、Array类型时,可以直接显示情况二:当变量是null、undefined、Boolean类型时,内容为空;如果希望可以显示......
  • Java基础知识篇04——数组
    哈喽,大家好!我是白夜,今天给大家聊聊数组。一、概念计算机在内存区域分配的一段连续的区域(空间),用来存储同种类型的多个数据简单的理解,数组就是一堆盒子,同一时间,可以保存多个相同数据类型的数据数组名:数组的名字数组元素:就是存放在数组里面的数据数组索引:就是数组里面连......
  • Go05-结构体+方法+面向对象三大特性+接口
    Go05-结构体+方法+面向对象三大特性+接口1.Go面向对象Go支持面向对象编程,但是和传统的面向对象编程有区别,并不是纯粹的面向对象编程语言,所以说Go支持面向对象编程特性是比较准确的。Go中没有class类,Go中的结构体struct类似于其他编程中的类,即Go通过结构体struct实现面向对象编......
  • 深入了解鸿鹄电子招投标系统:Java版企业电子招标采购系统的核心功能
    随着市场竞争的加剧和企业规模的扩大,招采管理逐渐成为企业核心竞争力的重要组成部分。为了提高招采工作的效率和质量,我们提出了一种基于电子化平台的解决方案。该方案旨在通过电子化招投标,使得招标采购的质量更高、速度更快,同时节约招标成本,提升企业的资金节约率。 项目说明......
  • Java 中的方法引用运算符 ::
    Java中的方法引用运算符::方法引用运算符::在Java中,::是方法引用运算符,用于引用方法。它可以让你在代码中直接引用现有方法或构造函数,而不需要显式地编写Lambda表达式。方法引用有几种形式:静态方法引用:ClassName::staticMethodName实例方法引用:instance::instanceMet......
  • Java 代码执行本地命令
    byemanjusakafromhttps://www.emanjusaka.top/2024/03/java-exec-local-command彼岸花开可奈何本文欢迎分享与聚合,全文转载请留下原文地址。我们可以在命令行中执行各种命令,比如,创建文件、查看文件夹下文件、调用第三方工具等等。如果想在java代码中执行命令应该怎么......
  • 解决问题:java、mysql、docker、linux、redis、solr适合初级或者刚入门的大学生
    java、mysql、redis、linux、docker中的问题Java问题解决,idea问题解决调试,服务器问题解决,项目部署,项目调试linux服务器上的安装以及运行环境的部署docker的部署可做技术栈:java开发:javaweb,jsp,servlet,javase,spring,springboot,ssm服务器:linux问题docker问题,To......
  • Java创建线程的方式到底有哪些?
    一、线程的创建十种方式一个经典的面试八股问题是:java中有几种线程的创建方式?一般的回答是:实现Thread类。实现Runable接口。 实现Callable接口。也可以加上一个利用ExecutorService线程池: 实现Thread类。实现Runable接口。 实现Callable接口。使用ExecutorService线程......
  • java数据结构与算法刷题-----LeetCode45. 跳跃游戏 II
    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846文章目录解题思路:时间复杂度O(n......