`
孙海友
  • 浏览: 24091 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

OOP(面向对象编程)基础二 —— Java语言

 
阅读更多

在上一篇博客中,我们总结了OOP中的类的一些基本定义。

java中有许多的类,因此存在一些类之间有继承的关系。那么什么是继承呢?

 一.继承

在面向对象程序设计中,可以在已有的类的基础上定义新的类,而不需要把已有类的内容再写一遍,这就叫做继承

例子:

   举一个生活中的例子:电脑是一个类,电脑可以用来上网。那么台式机,笔记本等就是电脑的子类,它们都可以用来上网。

 

我们为什么要使用继承呢?

  1.  方便,少用很多重复的代码(提高代码的重用性)。
  2. 提高程序的扩展性。

  了解了什么是继承和使用继承的原因,我们现在看一下java继承的语法格式。

      java继承的关键字:extends 

      格式:

 public class 类名(子类名或超类名) extends 类名(父类名或基类名){
         //代码
}

    注意:子类继承父类后,那么必须要有一个参数个数,参数类型和参数顺序和父类构造函数完全相同的构造函数。

 

     例子:public class UNStudent extends Student{}

   在这个继承中如果Student类中存在一个构造函数:

public Student(String name){
	this.name = name;
 }

 

  那么在子类UNStudent中必须存在这样的一个构造函数:

 public UNStudent(String name) {
	super(name);
                  //super关键字表示的是要调用父类中带一个字符串参数的构造方法。
}

 

 我们定义了一个继承了父类的子类,那么子类与父类存在什么样的关系呢?也就是:

 子类能继承到父类的那些方法和属性呢?

        子类能继承到父类所有的属性和方法(构造方法除外)

 子类继承了属性和方法那些是能够使用的呢?

       子类能使用父类中的一个部分方法和属性:

                   1.公有的属性和方法

                   2.受保护的属性和方法

                   3.默认的属性和方法(不写访问修饰符的属性和方法)

 

   例子:同样是Student UNStudent的例子:

public class Student {
     private String name;//定义一个姓名属性
     private double score;//定义一个学分属性
     public void study(){
        score++;
	System.out.println(name+"正在学习中,学分是"+score);
     }
}

 

相应地定义子类

public class UNStudent extends Student {}

 

此时,UNStudent继承了Student中所有的属性和方法,但是可以使用的只有study()这个方法。

 

二.当父类和子类都相同的方法,但是子类中方法的具体实现和父类不同时,可以使用方法的重写

方法的重写:

重写的条件是:

           1.方法的返回值数据类型、方法名、参数个数、参数类型以及参数顺序都必须要和父类的完全相同。

           2.子类在重写方法时,方法的访问修饰符可以大于或者等于父类方法的访问修饰符。

           public -->  protected 默认的 --> private

 例子:同上一个例子

Student的类中有这样的一个学习方法: 

public void study(){
	score++;
	System.out.println(name+"正在学习中,学分是"+score);
}

那么在UNStudent子类要使用另一个study()方法,方法的定义如下:

public void study(){
	System.out.println(this.getName()+"的学习方式不同啦!");
}

在生活中存在有类似的例子:

电脑包括:台式机和平板电脑。电脑可以上网是一个方法,台式机的上网方法相同,而平板电脑的上网可以用触屏来使用,那么平板电脑的上网就是一种重写。

 

三. 方法重写后调用:

 根据实例化的对象,而进行不同的调用,如果实例化的对象是子类的,那么就会优先执行子类中定义或重写方法,如果子类中没有这些方法,则调用父类中的方法。

UNStudent un = new UNStudent("孙哥");
//调用方法以及属性
un.study(5);
//调用时会判断,优先执行了子类中的study()方法。

 

因为存在有子类和父类两个类,那么在实例化对象的过程中就会存在自动转型

   条件:要实现自动转型就必须要存在继承关系。

  格式一:

    父类名  对象名 = new 子类名();

Student stu = new UNStudent();

 

  还有一种特殊但是重要的自动转型。我们先举一个现实生活中的例子: 

     教大学生英语的老师,ta教的是大学生,那么这老师是否可以教小学生?能不能教初中生,那么高中生,其他类型的学生呢?

public class Teacher {
     /**
      * 定义一个教学的方法
      * @param stu是一个父类类型的参数,这样就表示可以接受所有Student以及Student子   类的对象。
      */
      public void teach(Student stu){
	    System.out.println(name+"在教"+stu.getName()+"学习英语!");
	    stu.study();//学生调用自己的学习方法
      }
}

 

teach这个方法中传递了一个父类Studentstu这个对象,这样就表示可以接受所有Student以及Student子类的对象。

 

那么:在定义方法中就存在自动转型

  格式二:

public 返回值数据类型  方法名(父类名  对象名){
	//调用在父类中定义过的方法
}

 

 实例化对象可以:

            1.父类名  对象名A = new 子类名();

            2.子类名  对象名B = new 子类名();

 调用方法:

            1.方法名(对象名A);

            2.方法名(对象名B);

那么自动转型的优点就是:

     节省重复的不必要的代码。

 

 

四.多态: 

我们了解了java类的继承,那么就会存在由方法重载,继承,方法重写,自动转型等技术点所以引起的一些列问题——多态

 存在多态的原因:

   Java在编译的时候并不能确定最终要执行的方法是哪一个;只会根据对象名的类型去判断,调用的方法存不存在,如果这个方法在对象名的类中不存在,则跑出语法错误。

   Java只有在运行的那一刻才能知道最终要执行的方法是哪一个。

 

本篇博文讲解了类的继承以及关于继承的一些知识点,谢谢大家。

 

分享到:
评论

相关推荐

    【Java】面向对象的课程设计——学生管理系统(增、删、查、找)

    适合人群:具备一定的编程能力,对Java语言的基本语法有一定的了解,适合在校大学生 能学到什么: ① 做系统的基本框架与思路 ② 功能模块化,后集体调用,方便后期管理 ③ 代码的规范使用 阅读建议: ①可以打开...

    Java高手真经(编程基础卷)光盘全部源码 免积分

    javaoop.zip 06.Java面向对象编程(计算器) javaexception.zip 07.Java面向对象编程扩展(计算器异常捕捉实例) 第3部分(5个程序包) javaio.zip 09.Java输入/输出流 javavi.zip 09.Java输入/输出流上机作业...

    跟我学Java面向对象程序设计技术及应用——Java中的面向对象技术(第1部分).pdf

    3) 你知道 java 语言在面向对象编程方面有何独特的特点吗? 1.1.1 面向对象技术基础 1、面向对象(OO)的基本概念 (1)面向对象的基本思想 面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范...

    Java高手真经(编程基础卷)光盘全部源码

    javaoop.zip 06.Java面向对象编程(计算器) javaexception.zip 07.Java面向对象编程扩展(计算器异常捕捉实例) 第3部分(5个程序包) javaio.zip 09.Java输入/输出流 javavi.zip 09.Java输入/输出流上机作业参考...

    worldwindjava源码-javascript-oop:面向对象编程和面向对象JavaScript

    中的面向对象编程 学习目标 使用构造函数生成特定类型的对象。 使用构造函数将属性附加到新对象。 回想一下在构造函数中定义方法的成本。 通过将自定义对象附加到原型来定义自定义对象的方法。 使用 ES6 类语法重构...

    java高手真经 光盘源码

    javaoop.zip 06.Java面向对象编程(计算器) javaexception.zip 07.Java面向对象编程扩展(计算器异常捕捉实例) 第3部分(5个程序包) javaio.zip 09.Java输入/输出流 javavi.zip 09.Java输入/输出流上机作业...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    面向对象编程的基础 要了解面向对象编程(OOP)的基本概念,需要理解 OOP 的三个主要概念,它们撑起 了整个 OOP 的框架。这三个概念是:封装、继承性和多态性。除此以外,还需了解对象、 类、消息、接口、及抽象等...

    115个Java面试题和答案——终极(上)

    下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于 Java 和它的功能的常见问题,Java 的集合类,垃圾收集器,第二篇主要讨论异常处理,Java 小应用程序,Swing,JDBC,远程方法调用(RMI),...

    java编程思想

    面向对象编程(OOP)具有多方面的吸引力。对管理人员,它实现了更快和更廉价的开发与维护过程。对分析与设计人员,建模处理变得更加简单,能生成清晰、易于维护的设计方案。对程序员,对象模型显得如此高雅和浅显。...

    matlab代码排版-Fortran-OOP:在Fortran中实现的面向对象编程的示例

    2003,该版本改进了衍生类型,支持面向对象编程。 Fortran语言的特点是比较严谨,语法和Matlab有相似之处。但是和Python、Java等高级语言相比,如果要使用其面向对象的特性,仍然有不少限制。 使用Fortran实现面向...

    《Java基础复习》—常识与入门

    Java面向对象的核心逻辑:OOP(面向对象编程)、封装、继承、多态、接口。。。。。。 JavaSE高级应用程序:异常、集合、线程、IO、反射、网络 二、常识与概述 计算机能直接识别的是机器指令,机器指令的封装是汇编语言...

    C#和C++的区别 自己网上找的

    C#是三大主流OOP(面向对象编程)语言(C++, Java, C#)之一,也是最新的一种,其中必然借鉴了前两者的长处,“否则它的缔造者就该打屁股”——候捷语,见《C# Primer 中文版》的译续:-) 它们三者有太多的共性,其语法和...

    java二八杠源码-Java-BasicOOPProblemSolving:Java基本问题解决

    java二八杠源码Java-Basic---OOP---问题解决 Java基本问题解决 Java教程 教程 Java 介绍:01 Java: java全息高级编程语言。 Eta 开发了 kore sun 微系统,但目前由 oracle 拥有。 为什么我们应该学习java/特性java...

    java实用手册,实战开发

    面向对象编程(OOP)具有多方面的吸引力。对管理人员,它实现了更快和更廉价的开发与维护过程。对分析与设计人员,建模处理变得更加简单,能生成清晰、易于维护的设计方案。对程序员,对象模型显得如此高雅和浅显。...

    基于Java的猜拳小游戏设计.doc

    17- 六、总结语 -18- 七、参考文献 -19- 绪论: 面向对象(OOP)的程序设计认为:现实世界是由一组彼此相关并互通信息的实体——对象 (Object)组成的。不管是一所学校、一个班级;一辆汽车、一张桌子;还是一个...

    编程新手真言......

    面向对象并非一切? 无论你以为上述观点是惊天大秘或不过尔尔,你都需要这本书! -------------------------------------------------------------------------------------------------------------- Todo: 整合过...

    PHP高级程序设计_模式、框架与测试

    书中首先从oop采用的机制——抽象类、接口、契约式编程开始讲起,然后介绍了静态方法、单例模式、工厂模式和php 6的新特性等内容,接着介绍了测试和文档方面的内容,还介绍了标准php库spl方面的知识以及php开发人员...

Global site tag (gtag.js) - Google Analytics