热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java复习小结(二)——面向对象

面向对象的概念面向过程:面对的是过程、动作。动作为主做事情,一步一步执行,强调的是过程。c语言就是面向过程的,都是以函数为
面向对象的概念

面向过程:面对的是过程、动作。动作为主做事情,一步一步执行,强调的是过程。c语言就是面向过程的,都是以函数为基础,对函数进行调用。

面向对象:面向的是对象,强调的是对象,对象即实体比如c++、Java、c#

面向对象的特点:

1、面向对象是常见的一种思考习惯,符合人们的思考习惯,力图使计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能的一致。

2、面向对象的出现,将复杂的事情简单化。类和对象是面向编程的核心概念。类是对一类事物的描述,是抽象的、概念上的定义。对象是实际存在的该类事物的每个个体,因而也称为实例。

3、面向对象的出现,将之前过程中的执行者变成指挥者

类与对象

类和对象说明

类就是对象的描述,对象就是该类的实例,定义类就是定义类中的成员。类的成员:成员变量——属性,成员方法——行为。

代码实现

类的定义:

[<修饰符>] class  <类名>  {

    [<属性>]

    [<构造器>]

    [<方法>]

}

属性定义&#xff1a;[<修饰符>]   类型    <属性名>   [&#61;初值]

修饰符private&#xff1a;该属性只能由本类的方法访问&#xff0c;修饰符public &#xff1a;该属性可以被本类以外的方法访问&#xff0c;属性有时也称为&#xff1a;数据成员&#xff0c;成员变量。

方法定义&#xff1a;

<修饰符>  <返回类型>  <方法名>  ([<参数表>])  {

        [<语句>]

}

修饰符&#xff1a;public、private、protected、static等&#xff0c;返回类型&#xff1a;return语句传递返回值&#xff0c;没有返回值&#xff1a;void。

对象的创建和使用&#xff1a;使用new&#43;构造方法创建一个新对象&#xff0c;使用“对象名.对象成员”的方式访问对象成员&#xff08;包括属性和方法&#xff09;如果创建了一个类的多个对象&#xff0c;对于类中定义的属性&#xff0c;每个对象都拥有各自的一套副本&#xff0c;且互不干扰。对象创建后属性会被赋初值&#xff0c;基本数据类型&#xff1a;short----0  int----0  long----0L   float---0.0F  double----0.0   char----&#39;\u0000&#39;   boolean----false&#xff0c;引用数据类型&#xff08;string&#xff09;----null

类的访问机制&#xff1a;在一个类中&#xff0c;类中的方法可以直接访问类中的成员变量。&#xff08;例外&#xff1a;static方法访问非static&#xff0c;编译不通过。&#xff09;不同类中的访问机制要先创建访问类的对象&#xff0c;再用对象访问类中定义的成员。

对象的内存体现

public class Test {public static void main(String[] args) {Car c1 &#61; new Car();Car c2 &#61; new Car();c2.num &#61; 5;c1.color &#61; "blue";c1.run();}
}

成员变量与局部变量

成员变量定义在类中&#xff0c;整个类中都可以使用。局部变量定义在方法代码块中&#xff0c;只在所属的区域有效。成员变量存在于堆内存的对象中&#xff0c;局部变量存在于栈内存的方法中。成员变量随着对象的创建而产生&#xff0c;随着对象的消失而消失。局部变量随着区域的执行而存在&#xff0c;随着区域的结束而释放。成员变量都有默认的初始化值&#xff0c;局部变量没有默认的初始化值。

参数传递代码

public class Test {public static void main(String[] args) {int x &#61; 4;chg(x);System.out.println(x);Demo d &#61; new Demo();System.out.println(d.x);chg(d);System.out.println(d.x);}//基本数据类型参数传递public static void chg(int a){a &#61; 100;}//引用数据类型参数传递public static void chg(Demo d){d.x &#61; 100;}
}

封装

使用者对类内部定义的属性&#xff08;对象的成员变量&#xff09;的直接操作会导致数据的错误、混乱或安全性问题。Java中通过将数据声明为私有的&#xff08;private&#xff09;提供公开的&#xff08;public&#xff09;方法&#xff1a;getXXX和setXXX实现对该属性的操作

构造方法

概述&#xff1a;当一个类的实例对象刚产生时&#xff0c;这个类的构造方法就会被自动调用&#xff0c;我么们可以在这个方法中加入要完成初始化工作的代码

特点&#xff1a;1、方法名与类名相同2、不用定义返回值类型3、没有具体的返回值

注意&#xff1a;1、不管有没有显示定义构造方法&#xff0c;创建对象都必须要通过构造方法初始化2、一个类中如果没有定义过构造方法&#xff0c;那么该类中会有一个默认的空参数构造方法3、如果在类中定义了指定的构造方法&#xff0c;那么类中的默认构造方法就没有了3、构造方法可以有多个&#xff0c;用于对不同的对象进行针对性的初始化4、多个构造方法在类中是以重载的形式来体现。

细节&#xff1a;一般方法不能直接调用构造方法&#xff0c;构造方法如果前面加了void就变成了一般方法&#xff0c;构造方法是有返回值的&#xff08;返回的是对对象的引用&#xff0c;或者对象的首地址&#xff09;

this关键字

this代表当前对象&#xff0c;当成员变量和局部变量重名&#xff0c;可以用关键字this来区分。this就是所在函数所属对象的引用&#xff0c;简单说哪个对象调用了this所在的函数&#xff0c;this就代表哪个对象&#xff0c;this也可以用于在构造函数中调用其他构造函数。但只能定义在构造函数的第一行&#xff0c;因为初始化动作要先执行。

static关键字

通过new关键字才会产生出对象&#xff0c;这时系统才会分配内存空间给对象&#xff0c;其方法才可以供外部调用&#xff0c;如果希望无论是否产生了对象或无论产生了多少对象的情况下&#xff0c;某些特定的数据在内存空间里只有一份就可以使用static关键字。

特点·&#xff1a;1、static是一个修饰符&#xff0c;用于修饰属性和方法2、static修饰的属性被所有对象共享3、static优先于对象存在&#xff0c;因为static的成员随着类的加载就已经存在了。4、static修饰的成员多了一种调用方式&#xff0c;就可以直接被类名所调用&#xff0c;类名.静态成员5、static修饰的数据是共享数据&#xff0c;对象中的存储的是特有数据6、static修饰的属性和方法属于类不属于对象。

成员变量和静态变量的区别&#xff1a;1、两个变量的生命周期不同。成员变量随着对象的创建而存在&#xff0c;随着对象的被收回而释放&#xff0c;静态变量随着类的加载而存在&#xff0c;随着类的消失而消失。2、调用方式不同。成员变量只能被对象调用&#xff0c;静态变量可以被对象调用&#xff0c;还可以被类名调用。3、别名不同。成员变量也称为实例变量&#xff0c;静态变量成为类变量。4、数据存储位置不同。成员变量数据存储在堆内存的对象中&#xff0c;所以也叫对象的特有数据&#xff0c;静态变量数据存储在方法区&#xff08;共享数据区&#xff09;的静态区&#xff0c;所以也叫对象的共享数据。

注意&#xff1a;静态方法只能访问静态成员。&#xff08;非静态即可以访问静态又可以访问非静态&#xff09;静态方法中不可以使用this或者super关键字&#xff0c;主函数是静态的。

继承

子类继承了父类&#xff0c;就继承了父类的方法和属性。在子类中&#xff0c;可以使用父类中定义的方法和属性&#xff0c;也可以创建新的数据和方法&#xff0c;因而&#xff0c;子类通常比父类的功能更多。在Java中&#xff0c;继承的关键字用的是"extends"&#xff0c;即子类是父类的扩展。这样做的好处是提高代码复用性&#xff0c;使类之间产生关系&#xff0c;为多态提供可能。

子父类中成员特点&#xff1a;成员变量。当本类的成员和局部变量同名用this区分,当子父类中的成员变量同名用super区分父类&#xff0c;this和super的用法很相似。this代表一个类对象的引用。super代表一个父类空间。当成员变量是私有的时候&#xff0c;子类中不能直接访问父类的私有成员。成员方法。当子父类中出现成员函数一模一样的情况&#xff0c;会运行子类的函数。这种现象成为覆盖操作也称为重写&#xff08;override&#xff09;函数的另一个特性是重载&#xff08;overload&#xff09;&#xff0c;重写要注意子类方法在覆盖父类方法时&#xff0c;子类权限必须要大于等于父类的权限&#xff0c;另外静态只能覆盖静态或被静态覆盖。

注意&#xff1a;Java支持单继承&#xff0c;不直接支持多继承。当类与类之间存在着所属关系的时候就定义继承&#xff0c;写继承不只是为了复用性&#xff0c;而是要有关系才去继承。

final关键字

在Java中声明类、属性和方法时&#xff0c;可使用关键字final来修饰&#xff0c;表示“最终”&#xff0c;final关键字是修饰符。final修饰的类不能被继承。提高安全性&#xff0c;提高程序的可读性。final修饰的方法不能被子类重写。final修饰的属性为常量&#xff0c;一旦初始化后不可再被赋值&#xff0c;习惯上常量用大写字符表示

多态

概念&#xff1a;多态性可以理解为一个事物的多种表型形态&#xff0c;方法的重载、重写就是多态的一种体现。

子类对象的多态性&#xff1a;在Java中子类的对象可以替代父类的对象使用&#xff0c;使用的前提是要继承、实现&#xff08;接口&#xff09;要有子类对父类方法的重写&#xff0c;使子类具有不同的方法实现。将父类类型的引用指向子类的对象&#xff1a;向上转型就是将子类对象转为父类对象&#xff0c;此处父类对象可以是接口&#xff0c;“&#61;”左边是父类的引用&#xff0c;右边是子类的对象。虚拟方法调用&#xff1a;通过父类的引用指向子类的对象实体&#xff0c;当调用方法时实际执行的是子类重写父类的方法。父类引用的对象转化为子类类型称为向下转型&#xff0c;使用强转&#39;()&#39;&#xff0c;为了避免ClassCastException&#xff0c;最好在向下转型前进行判断&#xff1a;instanceof。格式&#xff1a;对象a instanceof 类A。判断对象A是否是类A的一个实例&#xff0c;是的话返回true&#xff1b;否则返回false。若a是A类的实例&#xff0c;那么A也一定是A类的父类的实例。

注意&#xff1a;对象的多态性不适用于子类对象的新方法。子类对象的多态性并不适用于属性。子类对象的多态性并不适用于静态方法。

使用多态可以增强程序的可扩展性及可维护性&#xff0c;使代码更简洁。不但能减少编码的工作量&#xff0c;也能大大提高程序的可维护性及可扩展性。

单例模式

单例模式就是一个类的对象的实例只有一个&#xff0c;如果我们要让类在一个虚拟机中只能产生一个对象&#xff0c;我们首先必须将类的构造方法的访问权限设置为private&#xff0c;不能用new操作符在类的外部直接产生类的对象&#xff0c;调用该类的某个静态方法以返回类内部创建的对象&#xff0c;静态方法只能访问类中的静态成员变量&#xff0c;所以&#xff0c;指向类内部产生的该类对象的变量也必须定义成静态的。单例模式分为饿汉式与懒汉式两种前者是线程安全的后者是非线程安全的。

抽象类和接口

抽象类

抽象类就是一个不具体的类&#xff0c;用abstract关键字来修饰一个类时&#xff0c;这个类叫抽象类。抽象类可以被继承不能被实例化&#xff0c;与fianl类恰好相反。用abstract来修饰一个方法时该方法叫抽象方法&#xff0c;只有方法的声明&#xff0c;没有方法的实现&#xff0c;以分号结束&#xff0c;例如&#xff1a;abstract  int abstractMethod(int a);注意抽象方法必须为public或者protected&#xff08;因为如果为private则不能被子类继承&#xff0c;子类便无法实现该方法&#xff09;&#xff0c;缺省情况下默认为public&#xff0c;抽象方法只保留方法的功能&#xff0c;而具体的执行交给继承抽象类的子类&#xff0c;有子类重写此方法。若子类继承抽象类&#xff0c;并重写了所有的抽象方法&#xff0c;则此类是一个实体类&#xff0c;即可以实例化。若子类继承抽象类没有重写所有的抽象方法&#xff0c;意味着此类中仍有抽象方法&#xff0c;则此类必须声明为抽象的。注意&#xff1a;抽象类有构造器&#xff0c;抽象方法所在的类一定是抽象类&#xff0c;抽象类中可以没有抽象方法&#xff0c;不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法。抽象类和一般类都是用来描述事物的&#xff0c;都在内部定义了成员但是一般类有足够的信息描述事物&#xff0c;抽象类描述事物的信息可能有不足。一般类可以被实例化&#xff0c;抽象类不可以被实例化。一般类中不能定义抽象方法&#xff0c;只能定义非抽象方法。抽象类中可以定义抽象方法同时也可以定义非抽象方法。

接口

接口是抽象方法和常量值的定义的集合&#xff0c;从本质上讲接口是一种特殊的抽象类&#xff0c;在这种抽象类中只包含常量和方法的定义&#xff0c;而没有变量和方法的实现&#xff0c;Java中不支持多继承但可以实现多个接口&#xff0c;定义类使用class&#xff0c;定义接口使用关键是interface&#xff0c;例如&#xff1a;interface  InterfaceA{}&#xff0c;继承类使用关键字extends&#xff0c;实现接口使用关键字implements&#xff0c;例如&#xff1a;class SubClass implements  InterfaceA{}&#xff0c;类与类之间是继承关系&#xff0c;类与接口之间是实现关系&#xff0c;使用关键字implements实现接口&#xff0c;然后重写接口中定义的抽象方法。接口可以看成是一个特殊的抽象类&#xff0c;是常量与方法的一个集合&#xff0c;不能包含变量、一般的方法。接口中的所有成员变量都默认是由public static final修饰的&#xff0c;接口中的所有方法都默认是由public abstract修饰的因此接口中的成员都是公共的权限&#xff0c;接口是没有构造器的&#xff0c;接口不可以实例化。接口定义的就是一种功能&#xff0c;此功能可以被类所实现&#xff0c;实现接口的类若没有重写所有的抽象方法则此类仍是一个抽象类&#xff0c;因此必须重写所有的抽象方法方可实例化。一个类在继承另一个类的同时还可以实现多个接口&#xff0c;与继承关系类似&#xff0c;接口与实现类之间存在多态性。

接口VS抽象类&#xff1a;相同点是接口和抽象类都不能被实例化&#xff0c;只能被其他类实现和继承。接口和抽象类都可以包含抽象方法&#xff0c;实现接口和抽象类的类都必须实现这些抽象方法否则实现的类就是抽象类。不同点&#xff1a;抽象类和接口定义不同&#xff0c;抽象类abstract接口interface。接口里只能包含抽象方法&#xff0c;不包含已经实现的方法&#xff0c;抽象类则可以完全包含普通方法。接口里不能定义静态方法&#xff0c;抽象类可以定义静态方法。接口里只能定义静态常量属性&#xff0c;不能定义普通属性&#xff0c;抽象类里既可以定义普通属性也可以定义静态常量。接口不包含构造函数&#xff0c;抽象类可以包含构造函数&#xff0c;抽象类里的构造函数并不是用于创建对象&#xff0c;而是让其子类调用这些构造函数来完成属于抽象类的初始化操作。接口不包含初始化快&#xff0c;但抽象类可以包含初始化块。一个类最多只能有一个直接父类&#xff0c;包含抽象类&#xff1b;但一个类可以直接实现多个接口&#xff0c;通过实现多个接口可以弥补java的单继承不足

 

推荐阅读
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
author-avatar
美多小涛_584
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有