Java封装,继承,多态。JVM机制的详解。

封装(高内聚,低耦合)

概念

封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装是一种信息隐藏技术,在java中通过关键字privateprotectedpublic实现封装。什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。 适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。

封装就是将属性私有化,提供公有的方法访问私有属性

高内聚:就是类的内部数据操作细节自己完成,不允许外部去干预。

低耦合:仅暴露少量的方法给外部使用。(举例:手机)

好处: 安全特性、将变化隔离、便于用性、提供重复性

隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。

 

通过封装,可以实现对属性的数据访问限制,同时增加了程序的可维护性。

由于取值方法和赋值方法隐藏了实现的变更,因此并不会影响读取或修改该属性的类,避免了大规模的修改,程序的可维护性增强。


  Default 属性或者方法前面什么都不写

Protected 受保护的   

一般使用private(除非本属性确定会让子类继承)

一些只用于本类的辅助性方法可以用private

希望其他类属性调用的方法用public

 

This关键字

是对象内部指代自身的引用。可以直接引用对象,可以解决实例变量和局部变量之间发生的任何同名的冲突。

 

实现封装,实现封装的具体方法?

1)、修改属性的可见性来限制对属性的访问。

2)、为每个属性创建一对赋值方法和取值方法,用于对这些属性的访问。

3)、在赋值和取值方法中,加入对属性的存取的限制。

什么是构造方法?构造方法的语法规则?

         构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值。

构造方法的语法规则:方法名与类名相同。没有返回类型。

使用new关键字实例化对象的过程实际上就是调用构造方法的过程。或者说实例化一个对象实际上就是去调用这个对象的构造方法。

Xin xin=new Xin();

在实例化对象的时候,已经实例变量赋予了初始值,完成了对象的初始化工作。

 为什么需要构造方法?

为属性赋值时,很容易忘记对其中的一项或多项进行赋值。构造方法可以简化对象初始化,为实例变量赋值。

  带参数的构造方法:可以显示地为实例变量赋予初始值。在不同的条件下创建不同的对象,这些对象的实例变量具有不同的值。

注意:在使用带参数的构造方法实例化对象时,传递的值和构造方法的参数应当在个数、次序和数据类型上相互配备。

通过调用带参数的构造方法,在创建对象时,一并完成了对象的初始化工作,简化了对象初始化的代码。

方法重载

方法名称相同,参数项不相同。那么认为一个方法是另一个方法的重载方法。

注意:重载只跟参数有关,与返回类型无关。方法名和参数相同而返回类型不相同,不能说是重载。

构造方法重载?

构造方法重载是方法重载的一个典型的特例。参数列表不同。

可以通过重载构造方法来表达对象的各种多种初始化行为。也就是说在通过new语句创建一个对象时,可以实现在不同的条件下,让不同的对象具有不同的初始化行为。 

 

多态

多态性是OOP(Object Oriented Programming 面向对象的程序设计)中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。

多态分为两种

A:编译时多态:方法的重载;

B:运行时多态: java运行时系统根据调用该方法的实例类型来决定选择调用哪个方法则被称为运行时多态。(多态主要就是运行时多态)

定义:指允许不同类的对象对同一消息作出响应。

 

概念

对象在不同时刻表现出来的不同状态。(水的状态:气态、固态、液态)

多态的前提

要有继承或者实现关系。要有方法的重写。要有父类引用指向子类对象。

好处和作用
多态的存在提高了程序的扩展性和后期可维护性消除类型之间的耦合关系

可替换性 可扩充性 接口性  灵活性 简化性

弊端:
父类调用的时候只能调用父类里的方法,不能调用子类的特有方法,因为你并不清楚将来会有什么样的子类继承你。

转型是在继承的基础上而言的

分向上转型和向下转型

向上转型

子类引用的对象转换成父类类型称为向上转型。(把子类对象转换成父类对象)

好处:

减少重复打代码,使代码工整简洁

提高系统的扩展性

 

场景:

比如说要写一万种动物,就要写一万个吃的方法,你要写到什么时候,现在这个时候就是用向上转型的时候。他可以让你以极少的代码,完成你所需的要求

 

向下转型:

父类引用的对象转换为子类类型称为向下转型。(但要注意转型的时候注意父类的对象是否一致)

因为当我们拿到一个父类,我们想把它当作我们需要的具体类时,可以尽情地用到我们要的类的所有方法属性,这时候当然需要向下转型,以便更多使用子类它独有的方法属性,但要确保一定能向下转型成功,不然出大错。 

特点:

最大的作用就是java的泛型编程,作用巨大

 

好处:

 

在当我们需要处理基类的很多子类并且要调用子类的特有方法时,不必对每一个子类对象实现一个方法,而只需要写一个方法来处理这些子类

 

接口关键字interface

接口在面向对象设计与编程中使用的非常频繁,特别是实现软件模块间的插接,

即插即用的功能,具有很大的优势

 

就像电脑的usb插扣,想当与一个接口,接口结构都不一样,但有自己的规格,也不是一个厂家产的,很多厂家通过固定的规格生成商品,能够很好的对接,即插即用

 

定义:

接口抽象方法常量值的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类只包含常量和方法的定义,而没有变量和方法的实现。

 

特点:

接口不能被实例化。

一个类如果实现了接口,要么是抽象类,要么实现接口中的所有方法。

 

场景:

当登记人员信息时,人 ,汽车,房子都是需要资料的,但是这三类没有共同的特征,所有要单独的把这种登记封装成一个接口,方便使用

 

意思就是多个不同种类的类抽象不出相同的父类,但确有共同的行为,在这个情况下,就要把这个行为进行封装

 

继承

Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。(举例:汽车)

类和类之间的继承关系可以用UML符号表示,其中父类又叫超类基类,子类又叫派生类。父类是子类的一般化,子类是父类的特化(具体化) JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承的缺点。

分类     继承分为单继承和多重继承。单继承是指一个子类最多只能有一个父类。多继承是一个子类可以有二个以上的父类。由于多继承会带来二义性,在实际应用中应尽量使用单继承。Java语言中的类只支持单继承,而接口支持多继承。Java中多继承的功能是通过接口(interface)来间接实现的。

特征

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

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

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

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

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

好处:

提高了代码的复用性,减少了代码的数量,让类与类之间产生关联

方法的重写

当子类中出现和父类一样的方法(返回值、方法名、参数列表相同),会出现重写,也可以称为是覆盖。(注:重写时子类的方法权限一定要大于父类方法权限)

方法重写和重载有什么区别

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

JVM

基本概念:

  JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM是运行在操作系统之上的,它与硬件没有直接的交互。

 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

运行过程:

     我们都知道Java源文件,通过编译器,能够生产相应的.Class文件,也就是字节码文件,而字节码文件又通过Java虚拟机中的解释器,编译成特定机器上的机器码 。

也就是如下:

     ① Java源文件—->编译器—->字节码文件

     ② 字节码文件—->JVM—->机器码

     每一种平台的解释器是不同的,但是实现的虚拟机是相同的,这也就是Java为什么能够跨平台的原因了 ,当一个程序从开始运行,这时虚拟机就开始实例化了,多个程序启动就会存在多个虚拟机实例。程序退出或者关闭,则虚拟机实例消亡,多个虚拟机实例之间数据不能共享。 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值