Java和C++都是面向对象的编程语言,那么也就是说类和对象成为了这两门语言的精髓与灵魂,今天就来谈一下类和对象的一些小节。
1.类和对象
A.类
类看似很抽象,其实,我们发现,生活中我们已经习惯于把东西归类,这里的其实我认为是有共同点的,比如“学生”就是一个类,因为所有需要上学的自然人都具有一定相通的属性,这样我们一提到这个词的时候立马会联想起很多相关联的信息。同样的在程序员眼里,也一类具有一定共同属性的集合体,是一个模板,里面锁定了一些属性,也可以说类是对象的提取与抽象的归纳。
B.对象
“万事万物皆对象。”是一句很抽象的话,不过也对于对象最形象的描述,我们眼睛所看见的任何一个物体都是一个对象,我们脑海所想到的物体也是对象。同时,对象由特征和行为构成,形成了具体的对象。
C.定义类格式
在java中,类还是有一定的具体语法格式需要遵循的,如下:
public class 类名{
private 数据类型 属性名;
public 类名([参数列表]){
//方法体
}
public 返回值类型 方法名([参数列表]){
//方法体
}
}
(public、private、protected均为访问修饰符,具体应用可见上篇日志)
D.方法的分类
Java中的方法也就是C++中的函数,不过,我认为“方法”这个词更具体更形象,就想我们拿到一道方程题,我们首先要化简,再合并同类项,最后约分等等,这里面的每一步就是一种解决问题的“方法”。同样的,当我们处理任何一个对象的时候都需要用到某种“方法”这里主要想说一下Java中方法的构成与分类。
Java中的方法是需要两部分组成的:
返回值类型+参数
进而我们可以把Java的方法分为两类:
1.根据返回值划分
有返回值的方法和无返回值的方法
2.根据参数划分
有参数的方法和无参数的方法
E.方法重载
重载顾名思义,名字是一样的但是“换了汤也换了药”,一个方法在不同的类中可能需要进行不同的功能,这时我们就要给这个方法进行重载,并且通过参数列表的区别来区分这两个“同名兄弟”何时能够正确的发挥自己的作用。这就是我们要知道实现方法重载后是如何调用的,系统根据你调用方法时,所传递的参数个数和参数类型来决定调用具体的方法。
F.方法参数传递
分为两种,第一种是基本数据类型的传递。第二种是对象的传递
G.构造函数
构造函数可以说是一种特殊的方法,是一个类的自有属性。
构造函数和普通方法的区别:
1.构造函数不能有返回值类型,普通方法必须要有返回值类型
2.构造函数的函数名必须和类名相同,普通方法的自己定义
3.系统会默认提供一个构造函数,普通方法必须自己写
4.构造函数是用来实例化对象(创建对象)和初始化属性,普通方法是执行某一个功能的方法。
5.每创建一个对象,只会使用一个构造函数,并只执行一次,普通方法可以多次调用。
H. this关键字
this指针可以说是对于当前对象的一个简称,比如在甲乙熟知是可以互称“你我”这样就比称呼 对方名字要简单很多了,也就有了效率。我们要注意的是以下两点:
this关键字是指当前的对象;
this关键字是用来区分属性和参数。
I.值传递和引用传递
值传递:适用于Java中的基本数据类型(包括了String)。
值传递是将变量A中的值,拷贝一份存入到变量B中,两个不同的变量分别存储相同的值,对变量B的值做修改
是不会影响到变量A。
引用传递:适用于Java中的所有类(String除外)只要是用class定义的类都属于
引用传递是将对象名A中存储的地址,拷贝一份存入到对象名B中,这样两个对象名中存储的地址相同,那么在
调用方法或者属性的时候都访问的是同一对象。
以上是对于类和对象的一些基本问题的理解,下面我主要想说一下Java的面向对象的魅力所在,也就是其精髓继承与多态。
A.继承
前面提到了,“学生”是一个类,那么我们如果邮箱描述在大学里读书的学生,是否必须要重新定义一个“大学生”类呢?首先,大学生和学生虽然有差别,或者说,大学生具有一些普通学生不具备的特性,但是,所有学生具有的属性,大学生也都具有啊,那何必再重复一遍强调“大学生”的“学生”属性呢?这里我们就可以用到继承了,所以,继承既增加程序的可重用性,也增加程序的扩展性。大大的提高了我们编程的效率也是的程序有更好的扩展性。
但是我们回到程序员的角度观察问题,会问子类继承到了父类的什么?在Java里面子类主要继承了:
第一种是不在同一包下:子类可以继承父类公有的属性和公有的方法。
第二种是在同一包下:子类可以继承父类公有的、受保护的以及默认的属性和方法。
B.继承的格式
要实现继承必须使用extends关键字
public class 子类名 extends 父类名{
}
C.方法的重写
这里就要说到另一个重点了,多态就是在方法的重写里面得到了很好的体现,比如在“学生”类中,作业这个方法在子类“初中生”“高中生”“大学生”中肯定是不同的,但是,我们可以都用作业这个名字来针对不同类的对象来实现多种多样的功能,从而实现了多态。
那么方法重写有什么条件么?必须存在继承的关系,子类中定义的方法必须在父类中存在,并且子类定义的方法格式必须完全和父类一样,但是子类定义方法的访问修饰符可以比父类的访问修饰符范围大(不能小).
另外,我们需要注意的是子类可以重载父类中的方法。
D.自动转型
要实现自动转型必须满足的条件:
1.必须存在继承关系
只有存在继承关系的类才可以使用自动转型。
因为父类包含了子类。
自动转型的格式:
父类名 对象名 = new 子类构造函数([参数列表]);
对象名是父类类型的,但是具体的对象却是通过子类的构造函数创建的,那么对象是子类的。
会优先执行子类的方法。
在调用方法的时候,会优先执行子类的方法,如果子类中没有该方法,则执行父类的方法。
E.接口
Java与C++我体验到区别之一就在于Java为我们提供了丰富多样的“接口”也就是说我们已经具有了很多可以直接拿来应用的“类”,Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 Java接口,Java中存在的结构,有特定的语法和结构。
定义接口的格式:接口只有公有的属性和方法,但是因为方法是没有具体的实现,所以在使用的过程中,很少定义属性,这里我们要注意由于接口中是没有构造函数,所以接口就不可以创建对象。
public interface 接口名{
定义常量的格式:
public static final 数据类型 常量名(常量名最好全部大写) = 值;
定义方法的格式:
public 返回值类型 方法名([参数列表]);
返回值类型 方法名([参数列表]);
}
那么如何实现接口呢,格式如下
实现接口的关键字是implements
public class 类名 implements 接口名{
//重写接口中定义的所有方法。
(这里很重要,当我们要继承一个接口的时候,我们必须重写接口中所有的方法,在具体的程序编写中,可以通过查看接口源代码来确定,接口中有什么方法)
}
由于接口是一种特殊的类,所以接口可以继承接口的,格式如下:
public interface 子接口名 extends 父接口名{
}
F.抽象类
抽象类是介于接口和类之间的一种类。他比接口要具体,但是又比类要抽象,这里就有必要讨论下他与接口和类的联系与区别了。
在继承抽象类时,必须覆盖该类中的每一个抽象方法,而每个已实现的方法必须和抽象类中指定的方法一样,接收相同数目和类型的参数,具有同样的返回值,这一点与接口相同。
当父类已有实际功能的方法时,该方法在子类中可以不必实现,直接引用的方法,子类也可以重写该父类的方法(继承的概念)。
而实现 (implement)一个接口(interface)的时候,是一定要实现接口中所定义的所有方法,而不可遗漏任何一个。
这也就看出来了,抽象类是介于接口和类之间的一种形式。
另外,抽象类不能产生对象的,但可以由它的实现类来声明对象。
定义抽象类的方法如下:
定义抽象类的关键字是abstract class
public abstract class 类名 extends 父类 implements 父接口,...{
定义抽象方法
public abstract 返回值类型 方法名([参数列表]);
}
最后,通过这次小结,我也再一次的复习了类和对象的一些基本概念与定义方法,这都是我们在今后的Java编程中需要天天打交道的,希望大家能够给我提出一些意见,文中肯定也有很多错误,希望大家指正,并且,此文结构和部分内容来自熊哥讲义。
分享到:
相关推荐
对于初学者而言,Java的语法清晰、规则明确,有助于快速上手。Java的面向对象特性使得编程过程更加模块化,从而能够实现更高水平的代码复用。面向对象的设计还能有效提升程序的可维护性与可扩展性,因为程序被分解为...
总的来说,"基于计算机软件开发的JAVA编程应用初探"这份资料将带领我们从基础到高级,全面了解Java在软件开发中的应用,无论你是初学者还是经验丰富的开发者,都能从中受益匪浅。通过学习和实践,你可以提升自己的...
### 初探WSDL2JAVA工具的使用:深入解析与实践指南 在现代软件开发领域,Web服务(WebService)已成为企业...无论是对于初学者还是经验丰富的开发者来说,掌握WSDL2JAVA工具的使用都是提升Web服务开发技能的关键一步。
总的来说,这个项目是一个很好的学习实践,可以帮助初学者了解如何在实际场景中运用Java编程,同时也可以锻炼他们在MyEclipse中的项目管理和代码调试能力。对于更高级的开发者,这个程序可以作为一个基础,进一步...
标题《Head First Java Second Edition 英文版》指的是《深入浅出Java 第二版》的英文原版PDF文件,它是一本专为Java初学者设计的入门级教程书籍。本书通过独特的教学方法,帮助读者快速掌握Java编程的基础知识,并...
本篇文章将详细解读“飞机大战Java源代码”,并针对游戏开发中的关键技术和设计模式进行深入探讨,适合Java初学者和对游戏开发感兴趣的朋友学习。 首先,让我们了解一下“飞机大战”这款游戏的基本概念。它是一款...
"飞机大战精简版"就是这样一款特别为初学者设计的小型游戏,它巧妙地结合了Java编程语言的面向对象特性,使得学习过程既有趣又富有挑战性。 首先,让我们了解一下Java的面向对象编程(Object-Oriented Programming,...
《Java实现:坦克大战——初探游戏编程与技术要点》 在编程的世界里,游戏开发是一种极具挑战性和趣味性的实践。对于初学者来说,通过编写简单的游戏,如“坦克大战”,可以快速掌握基础编程概念,并逐步提升到更...
【Java编程初探:创建与运行“我的第一个Java程序”】 在编程的世界里,迈出第一步总是最激动人心的。在这个名为"My-First-Java-Program"的项目中,我们将一起探索如何编写并运行一个简单的Java程序。这个项目的...
本书以初学者为核心,全面介绍了使用Java进行程序开发的各种技术。在内容编排上由浅入深,让读者循序渐进地掌握编程技术;在内容讲解上结合丰富的图解和形象的比喻,帮助读者理解“晦涩难懂”的技术;在内容形式上...
对于Java初学者来说,这是一个很好的实战练习,能够帮助他们巩固理论知识,提升编程技能,并了解如何将这些知识应用于实际项目中。在实践中,不断学习和改进,是成为一名优秀Java开发者的必经之路。
这份名为"Shopping.zip"的压缩包文件,就是为Java初学者提供的一款简易超市管理系统的源代码实例。这个系统虽简单,但涵盖了Java编程的基础知识和面向对象的设计思想,对于刚入门的开发者来说,是很好的实践项目。 ...
Java 8是Java编程语言的一个重要版本,引入了许多新特性,极大地提升了开发效率和代码的可读性。...总之,这个压缩包是一个全面学习Java 8编程的宝贵资源,无论是初学者还是有经验的开发者,都能从中获益。
Java的面向对象特性使得代码结构清晰,易于理解和维护,非常适合初学者。 在Just_Java-app-master这个压缩包中,我们可以期待找到以下关键文件: 1. `AndroidManifest.xml`:这是每个Android应用的核心配置文件,...
在“手把手教你全文检索”Apache Lucene初探这篇文章中,xingoo博主深入浅出地介绍了如何使用Lucene进行文本检索,包括安装、创建索引、执行查询等步骤,是初学者入门的良好教程。 搜索引擎的研究与实现(Java)通常...
本文将深入探讨一个流行的Java构建工具——Maven,并以"HelloMM"项目为例,引导初学者逐步了解其基本用法。 "Maven初探:一切从HelloMM开始!"这个标题暗示我们将从一个简单的Java项目开始,学习如何使用Maven进行...
从标签“Spring初探共18页.pdf”我们可以推测,这份资料可能是一个关于Spring框架基础入门的学习资料,适合初学者。 Spring是Java企业级应用开发中最常用的一个框架,它以其依赖注入(Dependency Injection,简称DI...
《P2P技术初探:基于Java的P2P聊天系统》 在信息化时代,P2P(Peer-to-Peer)技术已经成为了网络通信领域的重要组成部分。尤其对于初学者而言,掌握P2P技术不仅能提升编程技能,还能帮助理解网络通信的底层原理。本...
【Spring 2.0 知识点详解】 Spring 2.0是Java企业级应用开发中的重要框架,它以其简洁的“实用主义”原则降低了J2EE开发的复杂性。...无论是初学者还是经验丰富的开发人员,都可以从Spring 2.0的学习中获益匪浅。
本项目“订餐Java Web学习项目”正是针对初学者设计的,旨在帮助你迈入这个领域的门槛,掌握基础的Java Web开发技能。 一、Java Web基础 Java Web是基于Java技术的Web应用程序开发平台,主要包括Servlet、JSP...