在接触JAVA的时候,自己所看到的关于介绍JAVA的书中的最大的特点就是JAVA是一门面向对象的语言。但是,何为面向对象,而向对象到底有什么好处,其实在第一次学习的时候我并不有感觉到他到底有什么好处,相反会觉得这个东西很麻烦。然而,在完成了类的继承等相关内容的学习之后,我想我对面向对象编程也有了一定的了解。
1.继承与方法的重写
继承,在现实生活当中也时常用到,比如一个家庭当中,儿子可以依法继承父亲的财产。在这里,我们可以大抵地将继承这个概念进一步地开展开来,继承就是采用别人所有的东西,让你的各项工作变得轻松。比如你继承了你父亲的遗产,那么在短期内你的经济状况一定还不错。而在程序当中,我们之所以要继承,是因为它可以帮助我们减少相当一部分的工作量,我们不必要为了做一些相似的工作而输入重复的代码。
那么,在程序设计时,当我们在进行一些类的创建时,由于很多类具有相似的属性,所以,对于这些相同的我们不必去再重复那些之前写过的代码,而为了达到相同的目的,我们只需要用一个extends关键字来表示我们已经继承了前一个对象的属性和方法。请看如下代码示例:
程序一:
//创建一个学生类
public class Student{
//声明学生的名字属性
public String name;
//设置学生名字的方法
public void setName(String name){
This.name = name;
}
//学生学习的方法
Public void study(){
System.out.println(“在学习”);
}
}
程序二:
//创建一个大学生类,同时继承学生类中的一些相关属性
public class UNStudent extends Student{
}
以上两段程序分别是两个类,其中一个是学生类,另外一 个是大学生类,我们可以看到,大学生类中用到了extends这个关键字,也就是说大学生类继承了学生类中的一些东西,那么这些东西是什么呢?我们通过一个主类来将这段程序实现,看看程序输出的结果到底是什么。
//程序入口
Public static void main(String args[]){
//实例化一个学生对象
Student st1 = new Student();
St1.setName(“张三”);
St1.study();
//实例化一个大学生对象
UNStudent st2 = new UNStudent();
St2.setName(“李四”);
St2.study();
}
运行之后,我们会看到的结果是: 张三在学习,李四在学习。为什么会出现这个结果呢?我们在大学生类中并没有写任何方法,而“李四在学习“这个结果中所使用的两个方法都来自于Student类,而这也就是继承的结果。也就是说,通过继承一个新类可以使用原来类中的一些属性和方法,而这也正是我们想要的。我们可以想象,如果是国家教育部门在用这个系统,他所关心的是学生的名字等等属性,面对全国数以亿记的学生,如果不能继承,每一个学生类中上都要写相同的代码,那样是不是很烦,即使你不断地使用”CTRL+C, CTRL+V”我想你也会受不了的。这个也恰好反映出现了继承的重要性。
2.多态
假如使用这个系统的不是国家教育部的人,而是一个学校的教育主管者,那么学生类中的一些方法对于他来说就太抽象了,因为这个要适应于所有的学生,难免显得太过宽泛。毕竟每个阶段的学生都具有这个阶段的一些独特之处,为了展现其个性,我们应该如何做呢?仍以上述程序为例。大学生的学习方法与高中生和初中生的学习方法肯定有不岂之处, 为了让我们得到想要的结果,我们可以对这些方法进行重写吗?也就是说在大学生类中重新定义一个新的学习方法,这样可行吗?答案是可行的。而这种做法在JAVA程序设计中我们叫做方法的重写。比如,大学生的学习主要是靠自己学习,没有人再会逼着你学。那么我们可以在学生类中再加入这样一行代码:
//定义大学生学习的方法
Public void study(){
System.out.println(name+”是大学生,学习全靠自己”);
}
再次运行程序之后我们会发现,两次程序运行的结果发生了改变,分别 为:张三在学习,李四是大学生,学习全靠自己。但是,从 主类中看我们可以看到, 两个学生对象所调用的方法的代码是完全一样的,但是为什么会出现运行结果不一样这个情况呢?这种情况我们叫做多态,也就是说由于继承等操作会 导致程序运行时虽然不同的对象调用的是同一个方法,但是运行结果不一样。要解释这种 现象,我们应该从程序运行时其调用方法的机制来进行分析。当一个程序在运行时,如果子类对象调用的方法在你父类和子类中都有出现,那么程序先调用父类中的这个方法,之后再调用子类的这个方法对其进行覆盖操作,但是如果子类没有对这个方法进行重写,那么显示出来的结果就是父类中的方法的结果,但是程序运行的过程中它确实去子类中查看过有没有对父类方法进行重写了的方法,但是如果子类中没有,那最后显示的就是父类中的方法。而这个机制,恰恰给我们在子类中设置一些个性化的具有特色的方法提供了方便。
3.接口
在前面所述的继承中我们可以知道,如果一个子类中没有写方法,但是它会自动调用父类中的方法。假设我们要求子类必须重写父类方法,那么该如何实现呢?这就需要用到接口。请看如下代码示例:
//定义一个Person接口
Public interface Person{
//定义接口中的方法
Public abstract void eat();
Public abstract void rest();
}
从上面的代码中我们可以看到,接口的定义已经不再是用class来进行定义了,它用了另外一个关键字Interface,还有一个显著的特点就是接口中的方法都没有方法体,也就是说接口中的方法没有被实现,而这个也就要求我们要继承接口的时候一定要对接口中的所有方法进行实现,缺一不可。例如:
//实现接口中的方法
Public class Student implements Person{
Public void eat(){
System.out.println(name+”在吃饭”);
}
Public void rest(){
System.out.println(name+”在休息”);
}
}
4.总结
类在继承时,只能继承父类中的方法和属性,但是不能继承构造方法,同时,对象在调用方法时,若对象定义的为父类的类型,那么它只能够调用父类中的对象,而不能调用子类的对象,但是如果对象是子类类型,那么它在调用方法的时候可以调用子类中特有的方法,同时也可以调用父类中的方法,但是如果子类中对父类的方法进行了重写,那么最后调用的将是子类中的方法。
接口其实与可以理解为一个类,只是名字与类不同而已,同时,接口与类有一个重要的区别就是接口在继承的时候一定要进行方法的实现,不然程序会报错。除此之外,接口中不能用来实例化对象,若以上面的Person接口为例,代码:Person P = new Person();是错误的。
最后一个需要说明的便是继承的个数问题。学过函数的映射概念我们知道,一个映射当中,可以有多对一,一对一的情况发生,但是决对不允许有一对多的性况发生。同样,在类的继承中,一个子类只能继承一个父类,但是一个父类可以被多个子类继承。然而,在接口的继承中我们可以有一个子类继承多个接口的情况发生,这也是接口与类的一个重要区别。
分享到:
相关推荐
java学习心得java学习心得java学习心得java学习心得
Java学习心得 在编程的世界里,Java是一种广泛应用的高级编程语言,以其跨平台、面向对象的特性深受开发者喜爱。对于初学者来说,掌握Java语言既是一项挑战,也是一次充满乐趣的学习旅程。"Java学习之路:不走弯路...
Java学习心得笔记主要涵盖了几大知识点,包括运算符、Integer类、引用类型、数组、多维数组、字符串类。下面将详细阐述这些内容。 1. **运算符**: 在Java中,运算符包括移位运算符。`是左移运算符,将二进制数向...
资源名称:Java入门1·2·3——一个老鸟的Java学习心得内容简介:本书是一本与众不同的Java入门好书。作者以独特的视角,向Java初学者讲述了如何才能真正理解和掌握Java语言。本书充分考虑了初学Java语言的种种困难...
Java学习心得 Java学习心得是Java基础知识的总结和概括,本文将从Java的基本概念、访问控制修饰符、Java源程序和c++类的编译型源程序运行、对象和类、构造方法、源文件声明规则、Java数据类型等方面对Java基础知识...
本文将基于一篇关于Java多线程的学习心得文章,深入探讨Java中的多线程概念、原理及其实际应用。 #### 二、Java多线程基础 Java提供了内置的支持来简化多线程编程的过程。这主要体现在以下几个方面: 1. **语言...
java学习心得及其使用技巧java学习心得及其使用技巧
从给定的文件信息中,我们可以提炼出一系列与Java学习及面向对象编程(Object-Oriented Programming,简称OOP)相关的关键知识点。以下是对这些知识点的详细解析: ### 面向对象编程概述 面向对象编程是一种被广泛...
【Java工作室学习心得】 在Java工作室的学习过程中,我体验了从理论到实践的转化,明白了在编程领域,单纯依赖理论是远远不够的。动手实践是检验和巩固知识的关键环节。工作室学习强调自我驱动,不再像课堂那样有...
这篇学习心得主要涵盖了Java的基础知识、进阶概念以及实战应用,同时提及了与Oracle数据库的交互和JDBC(Java Database Connectivity)的使用。 首先,Java的学习从基础开始,包括语法结构、数据类型、控制流程(如...
### Java学习心得分享 #### 一、引言 随着信息技术的快速发展,编程语言成为现代社会发展不可或缺的一部分。在众多编程语言中,Java凭借其强大的功能、跨平台的优势以及丰富的类库支持,成为了许多开发者首选的...
关于java学习的一些方法,心得体会,大家随便看看
### Java学习笔记及心得知识点详细解析 #### 标题:Java学习笔记及心得 #### 描述:Core Java 学习笔记及心得 pdf格式可打开。涵盖了java的基础入门知识,非常适合自学的及想深入学习理解的同学。 #### 标签:...
一个老鸟的Java学习心得 -- 1·2·3
#Java入门必读书籍,有个人的笔记(少量介意勿下),书籍开篇第一章包括软件下载和环境设置。 #穿插了195个完整示例和350个Java源程序帮助读者理解
我写的我自己的一个感觉很好的java学习心得,希望能对广大JAVA爱好者提供一点帮助