Java OOP

Java oop知识点 在‌Java中,IO(输入/输出)是处理数据输入和输出的关键部分,它涉及从文件、网络、键盘等读取数据,或将数据写入屏幕、文件、网络等。集合类是可以往里面保存多个对象的类,存放的是对象,不同的集合类有不同的功能和特点,适合不同的场合,用以解决一些实际问题。在Java编程语言中,接口是一种重要的抽象机制,用于定义一组方法的行为规范,这些方法没有具体的实现,而是由实现接口的类来提供具体的实现。接口提供了一种方式来指定一个类必须实现的方法,但不指定这些方法的具体实现,从而实现了代码的可扩展性、可维护性和灵活性。 阅读详情

什么是面向对象?

面向对象程序设计以一种反应真实世界的方式组织程序,在真实世界中,所有对象的属性及动作都是相互关联的。使用对象提高了软件的可重用性,并且使程序更易于维护和开发,一个java程序可以看做是一个相互操作的对象的集合。

也就是说,面向对象编程其实就是在模拟一个真实的世界,只不过其表现形式是代码而已。使用面向对象思想进行编程的程序员就是“上帝”,我国上古神话中有女娲造人的故事,女娲在捏土造人中,先是单个捏出几个“人”,后来使用藤条以之前早出的人为模型大规模造人。在面向对象的世界中,程序员这个“上帝”抽象其身处的现实世界,在代码中创造出其模板(也就是类),之后以模板来创造对象。

就像现实世界中你不可能直接通过看就知道别人的信息一样,在代码实现中,这种行为同样的不允许的,也就是说其他对象不能直接访问或修改其他对象的属性(成员变量),对象的属性对外是隐藏的,要访问这些数据,只能通过相应的开放的方法进行访问。这就是封装(数据隐藏)。

面向对象同样模拟现实世界中各种事物之间的关系(根据需要),这就是继承和组合,(如父子继承关系中,儿子可以获得父亲传授给他的技能及资产,而表现在面向对象中,就是子类可以继承父类开放的属性和方法),同样,一个人可以有不同的身份,物品有不同的使用场景等等,表现在代码的世界就是多态。

面向对象的特征

封装(数据隐藏)

封装:实现封装的关键在于绝对不能让类中的方法直接访问其他类域的数据,程序仅仅能够通过对象的方法来实现与对象数据的交互。
这使得类可以全面的改变存储、操作数据的方式,而在外部,只要仍旧使用同样的方法,其他对象不会知道或介意其内部发生的具体变化。

封装思想:

1) 将类的属性私有化,避免对数据域的直接修改、
2) 提供公共的方法(getter & setter)实现调用、
3) 使得类易于维护、

权限修饰符:

image

应该总是将类的成员变量设为private,以保持良好的封装

继承

继承: 已存在的类复用继承类的方法和域,同时可以扩展自己的新的方法和成员变量

继承表示一种is-a关系

is-a:子类的每个对象也是超类的对象。其另一种表述方法就是置换法则,它表明程序中出现超类对象的任何地方都能够用子类对象置换。

比如说Student继承Person,则说明Student is a Person

继承的优缺点…
优点子类可以重写父类的方法来方便地实现对父类的扩展
缺点父类的内部细节对子类是可见的。
缺点子类从父类继承的方法在编译时就确定下来了,所以无法在运行期间改变从父类继承的方法的行为
缺点如果对父类的方法做了修改的话(比如增加了一个参数),则子类的方法必须做出相应的修改。所以说子类与父类是一种高耦合,违背了面向对象思想
java继承的方式

java语言只支持单继承,一个类只能有一个父类,但一个父类可以有任意多个子类,也就是,尽管java语言只支持单继承,但是支持多层继承。

在继承层次中,从某个特定的类到其祖先的路径称为继承链

public class Parent {...}

// java只支持单继承
public class Child extends Parent {...}

// 但java支持层继承
public class GrandSon extends Child {...]

注意:接口与接口之间也是继承关系

public interface Tools {...}

public interface Hatchet extends Tools {...}

注意: 尽管继承自同一个父类,但是其兄弟类之间没有任何关系
构造器不能被继承

方法的重写

当子类继承一个父类时,就可以同时继承基类公开的方法,同时子类可以对父类的功能进行扩展
子类继承自父类的方法对子类不适用时,子类可以重写父类的方法(Override)

方法重写规则:
  • 要求子类重写父类的方法”返回值类型、方法名、参数列表”与父类方法保持一致
  • 子类重写的方法权限修饰符不能小于(大于等于)父类方法的权限修饰符
  • 若父类方法抛异常,那么子类重写方法抛的异常不能大于父类(也可以不抛)
  • 子类与父类的方法必须同为static或非static(静态只能覆盖静态)
方法重写和重载有什么区别?

方法的重写用于当子类继承自父类的方法对子类不适用时,除权限修饰符外,返回值类型,方法名和参数列表都是相同的。
重载用在同一个类中各方法方法名相同,参数列表不同(与返回值类型没有关系)的情况

多态

多态:一个对象变量可以指示多种实际类型的现象称为多态,父类类型可以指示它所有的子类类型,而在程序运行时,
可以自动的选择调用哪个方法的现象称为动态绑定。
在 OOP 中最常用的多态性发生在当父类引用指向孩子类对象时,可以理解为一个事物的多种形态

注意:只在调用方法时才有动态绑定,当调用成员变量时,声明时是哪个类,则调用哪个类中的成员变量,若没有,则向该类的父类查找,没有则报错

例如:现实的事物经常为出现多种形态,比如现实中的人,在家是父亲、儿子、丈夫,到公司是员工、经理、老板等,到学校又可以是老师、学生等,在不同的场合一个人会有不同身份(状态)的转变,与之对应的就会有不同的行为(方法)
也就是说,尽管在声明时,使用父类类型A指示了子类类型B实例化的对象,但是在程序运行时,该对象所调用的方法依旧是其实际类型中的方法,也就是类B中定义的方法)

子类对象的多态性使用的前提:
  1. 要有类的继承
  2. 要有子类对父类的重写
多态下访问成员变量及方法的特点:
  • 访问成员变量:编译看左边,运行看左边
  • 访问成员方法:编译看左边,运行看右边

示例代码:

public class Parent {

    String test = "Parent";

    public void test() {
        System.out.println("Parent Test...");
    }
}

public class Child extends Parent {

    String test = "Child";

    public void test() {
        System.out.println("Child Test...");
    }
}

public class Test {
    public static void main(String[] args) {
        // 多态
        Parent p = new Child();
        // 访问成员变量:编译看左边,运行看左边
        String str = p.test;
        System.out.println(str); // Parent 
        // 动态绑定  
        // 访问成员方法:编译看左边,运行看右边
        p.test(); // Child Test...
    }
}

若方法用private、static或final修饰,或者为构造器方法,则采用静态绑定。

多态下访问静态成员变量及静态方法的特点:
  • 访问成员变量:编译看左边,运行看左边
  • 访问成员方法:编译看左边,运行看左边

静态变量或静态方法属于类而不属于对象,不推荐使用引用变量调用相应类的静态方法或变量。

package com.tennyson.test.oop;

public class StaticTest {
    public static void main(String[] args) {
        Parent p = new Child();
        String message = p.car;
        System.out.println(message); // Parent'Car

        p.test(); // Parent's Test
    }
}

class Parent {

    static String car = "Parent's Car";

    public static void test() {
        System.out.println("Parent's Test");
    }

}

class Child extends Parent {
    static String car = "Child's Car";

    public static void test() {
        System.out.println("Child's Car");
    }
}

java程序设计中,对象变量是多态的,其既可以引用它本身的类型,也可以引用所有它的子类的类型,但是不能够将超类的引用赋值给子类变量。

程序运行分为编译状态和运行状态
对于多态性,在编译时,”看左边”,将此变量理解为父类的类型
在运行时,”看右边”,关注于真正对象的实体:子类的对象,那么执行的方法就是子类重写的

public class Test{
     public static void main(String[] args){
          Parent p = new Child();  // 编译时将此变量看做是Father类型
     }
}
class Parent{
     ...
}
class Child extends parent{
     ...
}

子类对象的多态性,并不适用于属性(属性没有多态性)

向上转型和向下转型
向上转型 –> 自动转换

就如同一条狗,也可以笼统的说它是动物,不用强制转换,事实如此,表现在java中即为向上转型:

Animal a = new Dog();  // 向上转型

但如果直接说一个动物,就是一条狗,是欠妥的,若它本身是一条狗,则可以实现这种转换:

Animal a = new Dog(); 
Dog d = (Dog) a; // 向下转型

从这个角度,也可以解释了java中,当以父类型变量引用一个子类时,子类特有的方法不能使用。不同角色有其独特的方法,当你表现为什么方法时,就只能使用当前身份所拥有的方法

instanceof

对象 instanceof 类名
该关键字用于检测一个对象是否是某种类型 返回布尔值

VM与欧姆龙PLC通讯设置:Fins TCP/UDP协议实战避坑指南 本文详细解析了VM视觉平台与欧姆龙PLC通过Fins TCP/UDP协议进行通讯的实战配置与避坑要点。文章对比了Fins TCP与Fins UDP的差异,推荐在多数工业控制场景下优先选用Fins TCP以保证可靠性,并深入讲解了网络设置、寄存器地址映射、轮询优化等核心配置步骤。同时,针对常见的多次触发拍照、数据解析错误等问题提供了具体的解决方案和调试技巧,旨在帮助工程师快速建立稳定高效的通讯连接。 阅读详情

相关推荐

Keil MDK安装NRF52832开发环境全攻略(附系统时间错误解决方案)

本文详细介绍了如何使用Keil MDK搭建NRF52832开发环境,包括基础软件安装、项目配置关键步骤以及常见问题解决方案。特别针对系统时间错误导致的编译失败问题提供了实用解决方法,帮助开发者快速上手NRF52832开发。

weixin_29168153的博客 506

Java面向对象程序设计(OOP)

1、面向对象程序设计(OOP) 1.1、面向过程&面向对象 面向过程思想 步骤清晰简单,第一步做什么,第二步做什么…(线性思维) 面向过程适合处理一些较为简单的问题 面向对象编程 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。 面向对象适合处理复杂的问题,适合处理需要多人协作的问题! 对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作

记录学习历程 7703

MATLAB控制信号发生器(USB-GPIB-HS)GPIB仪器控制教程(含matlab代码)

自动化测试时需要自动产生信号,通过matlab控制信号发生器的频率与功率,以实现自动化信号生成输出

qq_43686057的博客 1606

Java基础---OOP

类的定义:在Java中,使用关键字class来定义一个类。类定义通常包括类名、成员变量(属性)、方法(行为)和构造函数。类名命名规则:类名通常使用大驼峰式命名法(CamelCase),并且首字母大写。示例// 成员变量// 方法// 启动汽车的代码// 构造函数**接口(Interface)**是Java中的一个引用类型,它是一组抽象方法的集合,这些方法没有具体的实现。接口可以被类实现,实现接口的类必须提供接口中所有方法的具体实现。定义接口:使用interface关键字定义接口。实现接口。

B6665X的博客 1950

别再手动算重量了!用C++给UG/NX写个自动计算零件质量与质心的插件(附完整源码)

本文详细介绍了如何使用C++为UG/NX开发智能质量分析插件,实现零件质量与质心的自动计算。通过结合NXOpen和UF_MODL API,设计高效的数据结构和批量处理机制,大幅提升机械设计效率。文章包含完整源码和实用技巧,帮助工程师告别手动计算,适用于复杂装配体的自动化工程计算。

weixin_30247307的博客 134

知识图谱_知识图谱 | 知识图谱做用户画像

导读:最近一直在思考怎么用知识图谱做推荐,但是目前能知道的内容都是基于路径的推荐和基于图特征的推荐,所以能不能换一个角度,探究一下用知识图谱怎么做用户画像,因为画像也是推荐系统重要的一部分。现在的知识图谱+推荐怎么做的传统的用户画像怎么做现在的知识图谱+推荐怎么做的?基于路径:可以理解成基于图谱的多路径召回,或者多路径推荐,然后根据路径的转移概率进行排序从而达到推荐的效果,基于路径比较适合简单的推...

weixin_28801659的博客 1461

什么是Java面向对象OOP

定义:封装就是把对象的属性(状态)和⽅法(⾏为)结合在⼀起,并尽可能隐蔽对象的内部细节,成为⼀个不可分割的独⽴单位(即对象),对外形成⼀个边界,只保留有限的对外接⼝使之与外部发⽣联系。java中修饰符分别为public、protect、default、private,他们这就说明了面向对象的封装性,所以我们要适用他们尽可能的让权限降到最低,从而安全性提高。子类对象调用就是子类对象自己的方法,体现了子类的特殊性,但前提是继承或实现。3. 如果子类覆盖了父类中的属性或方法,调用子类覆盖后的属性或方法。

m0_65467786的博客 422

有手就行的CNVD证书获取

知己知彼百战不殆。要想成功挖掘CNVD漏洞并获得证书,第一步就是深入了解CNVD的漏洞发放规则和评分标准。CNVD(国家信息安全漏洞共享平台)对漏洞的评级主要基于漏洞的危害程度、影响范围以及利用难度。此外,CNVD倾向于收录那些影响国内重要信息系统或民生领域的漏洞,因此在目标选择上可以优先考虑政府、教育、医疗、金融等行业的系统。同时,提交漏洞时需要提供详细的漏洞描述、复现步骤和修复建议,确保报告内容清晰完整,以提高审核通过率。

iSee857的博客 2444

Java中的OOP

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

m0_50110365的博客 822

肖特基二极管的反向恢复过程

本博客简述肖特基二极管反向恢复过程。

记得诚 1万+

30天入门 SAP BTP 开发系列之一:SAP 开发顾问为什么要学习 SAP BTP 开发?能带来哪些收获?

国内 SAP 开发顾问们的微信朋友圈,最近可能都被 SAP 和阿里这两家巨头宣布合作的重磅消息刷屏了吧。近日,德国软件巨头SAP SE与中国电商巨头阿里巴巴集团宣布建立战略合作伙伴关系。根据协议,阿里巴巴集团将利用 SAP Cloud ERP Private 强化企业基础设施,并采用联合上市策略为全球客户创造卓越价值。阿里巴巴将集成 SAP Business Suite,以简化系统维护与升级流程,并实现 AI 功能与核心业务流程的无缝整合。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2387

Java详细讲解OOP面向对象

类中的static代码块的特点:常见的异常

github_67177094的博客 2684

IoU的进化之路——IoU、GIoU、DIoU、CIoU四种损失函数总结

IoU、GIoU、DIoU、CIoU四种损失函数总结

chase 8131

oop java_java之OOP

类中属性的默认值1.数字类型(int,short,byte,long,float,double)的初始化默认值是02.boolean的初始化默认值是false3.引用类型的初始化默认值是null。例如字符串类型类中方法中的属性默认值是没有的这是两者之间的一个重要区别。所以方法中的属性使用时一定要赋值。类的搜索顺序(按优先级依次降低):1当前编译单元(即同一个类的之中)2单类型导入(单类型就是指定的...

weixin_33734087的博客 256

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java OOP的理解

Java-面向对象编程思想

一只程序菜鸡的博客 3015

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java中OOP的概念及示例

例如,当您在线登录到您的银行账户时,输入您的user_id和密码并按login,按login时会发生什么,输入数据如何发送到服务器,以及如何验证,这些都是从您身上抽象出来的。在这里,我们有一个抽象类Animal,它具有一个抽象方法animalSound(),由于动物的声音因动物而异,因此没有必要为该方法提供实现,因为每个子类都必须覆盖该方法以提供自己的实现详细信息。这就是我们把它抽象化的原因。好吧,在某个时候,如果你想更改EmployeeCount类的实现细节,你可以自由地这样做,而不会影响使用它的类。

Muhtar_的博客 1293

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

OOP思想与Java实现

大纲: 《Java编程思想》第一章对象导论摘录 OPP的基本思想 OPP与面向过程的区别 OPP解决了什么问题 Java中的OPP表现 OPP为面向对象编程,其重点是“对象”上面,什么是对象?自然界中的一切物体,例如猫,狗,花,草等等都是对象,而面向对象编程就是一人看世界的角度来进行编程。一只猫是怎么样的?毛色是黑色的还是黄色的?体重多少?体长多少?这些在人类社会中的“名词”,用来描述

WuSicheng的博客 3754

java oop_java oop详解

近日来重温了一下java oop的知识。加深了对面向对象的理解。尤其时继承方面。故写一篇博客。记录一下自己的想法和心得1.面向对象主要分为三大点(封装,继承,多态)封装的思想促进了类的形成。相比于之前面向过程的编程。所有的方法和属性都堆积在一个main方法中,代码无法重复利用。重复率高。代码的可读性也非常的差。因此。封装呼之欲出。将共有的成员变量和行为封装成类。方便代码的复用和隐藏。继承:将多个类...

weixin_42503645的博客 370

java oop思想_Java OOP初探

Java中最核心的内容就是OOP(面向对象编程)。OOP:封装、继承、多态。1、封装:类的成员在什么地方可以被访问。封装一般用访问修饰符来实现,公有方法封装私有属性。一般类的成员属性用private封装,通过public修饰符实现访问。(1)类的成员:静态成员和实例成员;静态成员用static修饰,内存放在系统的全局区。可以使用类名调用也可以使用对象名调用。静态成员之间也可以相互调用,但是静态成员...

weixin_28841265的博客 335

Java中AOP与OOP的区别

OOP是Java的基石,通过对象建模解决业务核心问题。AOP是补充,解决跨对象的横向关注点,二者共同构建高内聚,低耦合的系统。例如,一个电商系统用OOP定义商品和订单,用AOP统一处理订单事务和日志记录。

m0_71605233的博客 719

【Java编程教程】详解Java OOP 概念

隐藏内部细节和显示功能被称为抽象。比如电话,我们不知道内部处理。在Java中,我们使用抽象类和接口来实现抽象。

架构师小吴的博客 424

JAVA的OOP笔记

实例方法:子类重写后,通过子类对象调用时一定执行子类方法(多态)。静态方法:不存在重写,由引用类型决定。

2401_87578361的博客 1066

OOP模型、计算java对象大小

OOP模型 oop是java对象在jvm中的存在形式。 一个oop对象分为 对象头区域,实例数据区域,对其填充这三部分。 对象头 对象头区域分为三部分,Mark Word,类型指针,数组长度。 Mark Word:标记字。主要用来表示对象的线程锁状态,存放对象hashCode、GC次数 ​ 32bit占用:4B ​ 64bit占用:8B 类型指针(Klass pointer):指向Class信息的指针,表示该对象是哪个Class的实例 ​ 开启指针压缩:4B ​ 关闭指针压缩:8B 数组长度

llllllxj的博客 545

Java讲解OOP面向对象

变量类似于高中数学课上定义的x或者y这样的未知数,他们的值由自己定义类变量:static修饰的变量成员变量,可以通过类型/类名访问实例变量:没有static修饰的成员变量,必须通过实例对象访问成员变量:java中,成员变量是指在类体的变量部分中定义的变量,也称为属性。成员变量声明在类中,方法体之外,在创建对象时实例化;成员变量可被类中的方法、构造方法以及特定类的语句块访问。如果声明成员变量时没对其初始化,则系统会使用默认值初始化成员全局变量:定义在类中,作用于整个类,要考虑线程安全局部变量:定义在方法中,只

T278lk的博客 431

JAVA的OOP-Klass内存模型

OOP-Klass内存模型 什么是OOP-Klass模型 ​ HotSpot是基于c++实现,而c++是一门面向对象的语言,本身具备面向对象基本特征,所以Java中的对象表示,最简单的做法是为每个Java类生成一个c++类与之对应。但HotSpot JVM并没有这么做,而是设计一个OOP-Klass Model。 ​ 这里的 OOP 指的是 Ordinary Object Pointer (普通对象指针),它用来表示对象的实例信息,是藏在指针里的对象。而 Klass 则包含元数据和方法信息,用来描述Ja

weixin_46535027的博客 469

php oop java oop_什么是面向对象编程(OOP)

本篇文章给大家带来的内容是介绍java中什么是面向对象编程(OOP),让大家了解面向对象编程的优点,以及java面向对象编程的三大特性是什么。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。什么是面向对象编程(OOP)?面向对象编程(OOP)是一种围绕对象构建的编程语言模型,它使用对象和数据作为核心组件。此模型将数据划分为对象(数据字段),并通过类(方法)声明描述对象内容和行为。【...

weixin_39767887的博客 155
上一篇: Java 堆、栈和方法区
下一篇: Java 方法传参
Tennysons
博客等级 码龄10年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值