Java入门:面向对象

面向对象

面向对象(Object Oriented)是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、多态等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。

对象

对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。
类的实例化可生成对象,一个对象的生命周期包括三个阶段:生成、使用、消除。
当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。当系统内存用尽或调用System.gc( )要求垃圾回收时,垃圾回收线程与系统同步运行。

类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性和方法两个主要部分。
Java中的类实现包括两个部分:类声明和类体。

封装

封装性就是尽可能的隐藏对象内部细节,对外形成一道边界,只保留有限的接口和方法与外界进行交互。封装的原则是使对象以外的部分不能随意的访问和操作对象的内部属性,从而避免了外界对对象内部属性的破坏。
可以通过对类的成员设置一定的访问权限,实现类中成员的信息隐藏。

多态

对象的多态性是指在父类中定义的属性或方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或方法在父类及其各个子类中具有不同的语义。

重载

  • 方法重载是让类以统一的方式处理不同数据类型的手段。
  • 一个类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法。
  • 返回值类型可以相同也可以不相同,无法以返回型别作为重载函数的区分标准。

重写

  • 子类对父类的方法进行重新编写。如果在子类中的方法与其父类有相同的的方法名、返回类型和参数表,我们说该方法被重写。
  • 如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
  • 子类函数的访问修饰权限不能低于父类的。

继承

子类的对象拥有父类的全部属性与方法,称作子类对父类的继承。

  • Java中父类可以拥有多个子类,但是子类只能继承一个父类,称为单继承。
  • 继承实现了代码的复用。
  • Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。
  • 子类不能继承父类中访问权限为private的成员变量和方法。
  • 子类可以重写父类的方法,即命名与父类同名的成员变量。

构造函数

在继承的情况下,创建一个对象的时候,首先调用子类的构造函数,如果在子类构造函数没有调用父类的构造函数,那么子类的构造函数第一行默认调用父类的无参构造函数。
情况实例:


实例

析构函数(垃圾回收)

程序运行时定义和创建了很多的变量、对象,当这些变量和对象使用完以后,需要释放它们所占用的内存空间。
内存中有两个区域,栈区和堆区:

  • 栈区:储存基本类型的变量和类的引用。栈区的内存,随着方法运行结束,自动被回收。
  • 堆区:储存创建出来的对象。堆区的内存,会被JVM使用垃圾自动回收机制根据回收算法在适当的时机回收。
    垃圾自动回收机制是Java语言一项重大的特性。如果一个堆区中的对象,没有引用指向它,在程序中没有办法再使用它,那么它就会被垃圾回收机制认为是垃圾。
    finalize()方法实在Object类中定义的, finalize()方法在垃圾收集器准备好释放对象占用的储存空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,然后才会真正回收对象的内存。所以如果使用fianlize(),就可以在垃圾收集期间进行一些重要的清楚或清扫工作(如关闭流等操作)。
    Object类中finalize()方法格式如下:
    protected void finalize() throws Throwable{ }

抽象类

抽象类(abstract class):仅声明方法而不实现当中的逻辑,这样的方法成为抽象方法,如果一个类中包括了抽象方法,则该类称为抽象类。抽象类不能用来生成对象,它只能被子类继承,并于继承后完成未完成的抽象方法定义。
用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract关键字修饰的一个方法时,该方法称为抽象方法。
来个例子:
抽象类:动物


Animal.java

实现类:狮子


Lion.java

接口

接口不是类,而是对类一组需求的描述,这些类要遵从从接口描述的统一格式进行定义,接口就是要说明一组类能做什么,而不关心如何做。
接口让规范和实现分离,让系统的各组件之间通过接口耦合,是一种松耦合的设计。
接口声明方式:

public interface 接口名称
{
    零到多个常量定义
    零到多个抽象方法定义
}

接口中的常量

在接口中定义的变量,自动为常量,可以通过接口名直接访问,并且变量的值不可以修改。
来个例子:
接口MyInter


MyInter.java

InterfaceTest


InterfaceTest.java

接口中的方法

在接口中定义的方法,是希望实现类口的类可以去实现接口的方法。接口中所有的方法都是抽象的,像抽象类中的方法一样,实现接口的类,必须实现接口中定义的方法。
实现接口类格式如下:
public class 类名 implements 接口名1, 接口名2, ...
示例:
定义表示宠物的接口

Pet

实现接口的类


Dog

接口中的方法默认都是抽象的,即用public和abstract关键字修饰的。

一个类可以继承一个父类,但是可以实现多个接口。

接口的继承

一个接口可以继承另一个接口,那么子接口就继承了父接口中的所有方法。Java语言中类只能有一个父类,但是接口可以有多个父接口,接口是支持多继承的。

抽象类和接口的比较

Java中只能单一继承,也就是一次只能继承一个类,Java使用interface来达到某些多重继承的目的,可以一次实现多个接口。

抽象类和接口都具有如下特征:

  • 都不能实例化,只能被继承或实现;
  • 都可以包含抽象方法,实现抽象类和接口的类都必须实现这些抽象方法;

接口和抽象类不同点:

  • 接口里只能包含抽象方法,不包含已经实现的方法;抽象类则完全可以包含普通的方法。
  • 接口里不能定义静态方法;抽象类可以定义静态方法。
  • 接口里只能定义静态常量属性,不能定义普通属性;抽象类则既可以定义普通属性,也可以定义静态常量属性。
  • 接口不包含构造函数;抽象类可以包含构造函数,抽象类里的构造函数并不是用于创建对象,而是让其子类调用这些构造函数来完成属于抽象类的初始化操作。
  • 接口不包含初始化块,但抽象类则完全可以包含初始化块。
  • 一个类最多只能有一个直接父类,但包括抽象类;但一个类可以直接实现多个接口。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,094评论 0 62
  • 二、面向对象 1、面向对象思想: (1)概述:面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的...
    佘大将军阅读 425评论 0 1
  • 三重:代码、底层内存、源码 第一阶段:开发常用JavaSE基础、IDE、Maven、Gradle、SVN、Git、...
    guodd369阅读 16,452评论 1 44
  • 今天看了《早期记忆》这一章节,发现了我们早期的记忆,或者说过去的记忆对我们的影响很大。 有什么样的经历,他就会有什...
    长期主义者庆福阅读 242评论 0 1
  • 文/伶霏 昨天很用心写的一篇文章被简书首页投稿驳回,宝宝很不开心。简书的小编用统一的内容格式回复了我所有的投稿文章...
    伶霏阅读 176评论 0 1