首页 > 编程语言 >Java面向对象概念详解

Java面向对象概念详解

时间:2023-09-27 11:03:03浏览次数:31  
标签:Java 继承 子类 drive 面向对象 详解 父类 方法 public


对象

对象有两个层次的概念,现实生活中对象指的是可观世界的实体;而程序中对象就是一组变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为。可以将现实生活中的对象经过抽象,映射为程序中的对象,对象是对现实的高度抽象。

对象在程序中是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(Class)。类是描述对象的“基本原型”,它定义一类对象所能拥有的数据和能完成的操作。在面向对象的程序设计中,类是程序的基本单元。

类和对象的关系

对象是类的一个实例,创建一个对象就是类进行了实例化,从代码角度讲就是在内存中开辟了一块新的地址空间运行程序。一个类可以创建无数个实例。(只要计算机的内存足够大),使用Java代码实现如下:

Car a6l=new Car ();

即对象a6l是类Car的一个实例。

属性

存储对象的状态,可以理解为变量。

方法

实现对象的行为,可以理解为函数。

上面是面向对象理论的解释,我们可以以买车为例,我们通常说买车,但是没有人能够买到车这个抽象的东东。我们必须,选定品牌,和具体的型号,然后才能到4s店买到车,然后开回家。这里的车就是类的概念,而我们买的具体车,例如奥迪,a6l,白色,2019款45 TFSI就是实例。关于车的品牌和颜色以及型号就是属性,而车具备的基础功能,例如启动、刹车我们可以将其定义为方法。

 


面向对象三原则

封装、继承、多态

封装

封装实际上是使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。我们在使用api时,如果提供方不给我们源码,我们是无法知道其内部实现的,但是这并不会妨碍我们对api的使用。

Java的封装性通过关键字public、protected、private来体现。

public可以修饰类、接口、方法、变量

默认(什么都不写)类、接口、方法、变量

protected 可以修饰方法、变量

private可以修饰方法和变量

具体权限请参考下表:

Java面向对象概念详解_面向对象编程

                                                                     java关键字在面向对象中的应用

 


继承

继承性是面向对象程序设计语言的另一基本特征,通过继承可以实现代码的复用。继承而得到的类为子类,被继承的类为父类,所有直接或间接被继承的类都是父类。继承是子类利用父类中定义的方法和变量,就像它们属于子类自己一样。

Java中不支持多重继承。通过在类的声明中加入extends子句来创建一个类的子类:

Class SubClass extends SuperClass

{……}

如果缺省extends子句,则该类为java.lang.Object的子类。子类可以继承父类中访问权限设定为public、protected、default的成员变量和方法,但是不能继承访问权限为private的成员变量和方法。

特征:

(1)继承关系是传递的。如果类C继承类B,类B继承类A(多继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。

(2)继承简化了人们对事物的认识和描述,能清晰体现相关类之间的层次结构关系。

(3)继承提供了软件复用功能。如果类B继承类A,则建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。

(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。

(5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。

示例代码:

父类
public class Car {
public String brand=null;
public void drive(){
System.out.println("Car的drive方法。");
}
}
子类
public class Audi extends Car {
public String brand =”Audi”;
}
子类使用父类中的drive方法
Audi au=newAudi();
au.drive();

 


多态

多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

多态有两种表现形式:重载和覆盖。

重载(overload),是发生在同一类中。与父类和子类、继承毫无关系。

标识一个函数除了函数名外,还有函数的参数(个数和类型)。也就是说,一个类中可以有两个或更多的函数叫同一个名字,而他们的参数不同。他们之间毫无关系,是不同的函数,只是可能他们的功能类似,所以才命名一样,增加可读性,仅此而已!以junit4中常用的断言assertArrayEquals为例,他的作用就是进行数组比较(函数同名),而数组又分为不同的类型,例如:boolean[]、byte[],char[],long[]等等(参数不同),如下图所示:

Java面向对象概念详解_子类_02

assertArrayEquals重载应用

覆盖(override),是发生在子类中!也就是说必须有继承的情况下才有覆盖发生。

我们知道继承一个类,就有了父类的全部方法,如果你感到哪个方法不合适,功能要变,那就把那个函数在子类中重新实现一遍。这样再调用这个方法的时候,就是执行子类中的过程了。父类中的函数就被覆盖了。(当然,覆盖的时候函数名和参数要和父类中完全一样,不然你的方法对父类中的方法就不起任何作用,因为两者是两个函数,毫不关系)

示例代码:

父类
public class Car {
public String brand=null;
public void drive(){
System.out.println("Car的drive方法。");
}
}
子类重写父类中的dirve方法
public class Audi extends Car {
public String brand =”Audi”;
public void drive(){
System.out.println("Audi的drive方法。");
}
}
调用子类的drive方法
Audi au=newAudi();
au.drive();

执行Audi类的drive方法,而不是Car类的drive方法,控制台输出:Audi的drive方法。

标签:Java,继承,子类,drive,面向对象,详解,父类,方法,public
From: https://blog.51cto.com/liwen629/7621678

相关文章

  • Java String类的 equals、==和intern()
    Java实例的生成我们都知道,java中new一个类的实例是在JVM的堆中完成的,如下图所示:在这里我们以String类为例讲解一些更为细节的东西!String生成实例的代码如下:String str=new String("hello");对于通过new产生一个字符串(假设为” hello”)时,会先去上图的常量池中查找是否已经有了......
  • 面向对象编程的六大原则个人总结(附代码)
    面向对象编程的六大原则个人总结(附代码)目录面向对象编程的六大原则个人总结(附代码)一、什么是单一职责原则?核心思想好处代码示例总结二、什么是里式替换原则?规则代码示例总结三、什么是迪米特法则?核心思想规则代码示例总结四、什么是开闭原则?理解代码示例总结五、什么是依赖倒......
  • 详解如何使用VS code搭建JavaScript环境(适合小白)
    对于从事自动化测试的同学来说,有很多自动化测试项目是需要使用JavaScript脚本语言进行coding的,包括selenium、playwright、Puppeteer,那么选择哪种IDE合适呢?在这里我推荐visualstudiocode,即vscode!注意:本文介绍的是JavaScript在后端运行和调试的方法,并未涉及前端(浏览器)相关开发......
  • 详解Windows 安装Docker Desktop(百分百成功)
    相信IT职场同学目前对docker这个概念已经不在陌生,docker在运维同学和开发同学中应用比较广泛,测试同学想要进行实操则在很大层度上需要运维同学的配合(在指定的服务器上进行),这就需要看别人脸色行事,或多或少会有少许不爽;加之现在各种工具也都提供了docker镜像,我们在做工具调研时可......
  • 「Java开发指南」在MyEclipse中的Spring开发(三)
    在上文中(点击这里回顾>>),我们介绍了如何管理多个Beans和项目、Spring配置编辑器等,本文将继续介绍AOP、WebFlow支持等,要持续关注哦~MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:742336981欢迎一起进群讨论6.AOP支持BeansCrossReferences视图显示了所有被建议的beans......
  • 详解分布式系统核心概念——CAP、CP和AP
    最近研究Sykwalking,当调研oap如何进行集群部署时发现:skywalkingoap之间本身不能搭建集群,需要一个集群管理器来组建集群,它支持nacos、zookeeper、Kubernetes、Consul、Etcd五种集群管理器。我重点比较了nacos和zookeeper,发现二者最大的区别是Zookeeper采用了CP架构,nacos既支持CP......
  • 铷原子钟(铷钟)时间频率标准技术参数详解
    铷原子钟(铷钟)时间频率标准技术参数详解铷原子钟(铷钟)时间频率标准技术参数详解京准电子科技官微——ahjzsz铷原子频率标准主要有高精度授时型GPS北斗接收机、高性能铷原子钟、低相噪锁相电路、控制模块和高精度滤波模块组成。通过数字锁相技术综合了GPS北斗的长期稳定性、铷原子......
  • 详解git pull命令和使用过程中遇到的常见问题:fatal: ‘origin‘ does not appear to b
    使用gitpull同步远程代码使用git管理测试相关代码时,因为测试代码本身量级不大,所以很少使用分支,默认都使用master(主分支),当我们想要从远程origin(origin是远程仓remoterepository,clone到本地的默认名字)。当主机的master分支拉取代码过来和本地的当前分支进行合并时,需要使用如下命令:g......
  • 详解使用VS code搭建C语言环境遇到的那些坑(适合小白)
    Vscode搭建C语言环境为啥想起来要装c环境?是因为亲属家的大一新生小朋友问我关于c的问题!好吧,学c语言那是20年前的事儿了,但是在小朋友面前也不能跌份,于是乎准备温习一下c!一切代码都的从选IDE开始,网上看了一下,现在比较多的就是推荐visualstudio(vs)和visualstudiocode(vscode),如果想......
  • 搞定!详解MeterSphere 配置外部Mysql5.7的全过程
     最近试用了MeterSphere做接口测试平台,感觉使用起来非常方便,最重要的是开源免费!官方文档还是非常详细的,这里我就不多介绍了,感兴趣的同学可以参考:https://metersphere.io/docs/v2.x/经过讨论,决定在测试团队推广。由于公司数据库管理策略,数据库必须通过dba统一管理,所以需要MeterSph......