由于常常将Java和C++面向对象编程的原则搞乱,所以这次把相关要点分别总结一下,本文主要总结Java面向对象编程。

面向对象编程的三大特性是:继承性(inheritance), 多态性(polymorphism)和封装性(encapsulation)。

一. 继承性

[类修饰词列表] class 类名 [extends 父类名] [implements 借口列表名] { 类体 }

class Employee {
public int workYear;
public Employee() { workYear = 1; }
} class Teacher extends Employee {
public int classHour;
public Teacher() { classHour = 10; }
}
  1. 每一个类有且仅有一个直接父类,但能够实现多个接口
  2. 当前定义的类的构造方法必须在其第一句调用其直接父类的构造方法。格式为:

    super(參数列表);

    假设程序猿没有进行显式调用,则JVM会自己主动隐式调用不带不论什么參数的父类构造方法,即:super()
  3. 子类和父类之间能够进行类型转换

    (1) 将子类型数据转换为父类型数据能够直接採用隐式类型转换

    (2) 将父类型数据转换为子类型数据须要採用强制类型转换,且要保证执行时的正确性。

    // correct
    Teacher tom = new Teacher();
    Employee a = tom;
    Teacher b = (Teacher) a; // runtime error
    Employee a = new Employee();
    Teacher b = (Teacher) a;
  4. 能够用instanceof 来推断一个对象是不是某个类的实例对象。
    Teacher a = new Teacher();
    Employee b = new Employee();
    Employee c = a; System.out.println((b instanceof Teacher)); // false
    System.out.println((c instanceof Employee)); // true
    System.out.println((c instanceof Teacher)); // true

二. 多态性

静态多态性

静态多态性是指在同一个类中同名方法在功能上的重载(overload)。

动态多态性

动态多态性是指子类的成员方法对其父类同样声明的成员方法的覆盖(override)。这里的“同样声明”指的是除了方法修饰词外全然同样。利用动态多态性能够通过父类型的引用调用子类型的方法。

class Employee {
public int workYear;
public Employee() { workYear = 1; }
public printInfo() {
System.out.println("This employee has worked for " + workYear + " years.");
}
} class Teacher extends Employee {
public int classHour;
public Teacher() { classHour = 10; }
public printInfo() {
System.out.println("This employee has worked for " + workYear + " years.");
System.out.println("This teacher has worked for " + classHour + " hours.");
}
} public class Main {
public static void main(String[] args) {
Employee a = new Teacher();
a.printInfo();
}
}
  1. 在子类中定义与父类中同名的成员域不仅与多态性没有关系。并且不提倡
  2. 能够用superkeyword调用父类中被屏蔽的成员方法和成员域,即:super.xxx
  3. 动态多态性仅仅针对非静态的成员方法,即静态成员方法不具有动态多态性:当在子类和父类的类体中定义了具有全然同样声明的静态成员方法。且类型为父类的变量a指向子类的实例对象时,通过变量a调用该静态成员方法将调用在父类类体中定义的静态成员方法。

三. 封装性

这里主要须要搞清楚类成员的訪问控制模式及相应的訪问范围,例如以下表:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVpeGlhNTg2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

* 上述图片来自《Java程序设计教程》 第2版。雍俊海编著

至此,Java中面向对象的三大特性讨论完成,下一篇博客将会讨论抽象类、接口和内部类等内容。

Java面向对象编程(一)的更多相关文章

  1. Java面向对象编程基础

    一.Java面向对象编程基础 1.什么是对象?Object 什么都是对象! 只要是客观存在的具体事物,都是对象(汽车.小强.事件.任务.按钮.字体) 2.为什么需要面向对象? 面向对象能够像分析现实生 ...

  2. java 面向对象编程。。。。

    经过一周的学习(java),总结了许多,对java的理解,java的类型,运用,安装,基础语法,变量,常量,表达式,语句 java从C语言中继承了大量语言特性.java面向对象编程的基本特征,包括继承 ...

  3. 《Java面向对象编程》

    <Java面向对象编程> 第11章 对象的生命周期 11.1  创建对象的方式 用new语句创建对象 运用反射手段,调用java.lang.Class 或者 java.lang.Const ...

  4. JAVA面向对象编程课程设计——网络版单机斗地主

    一.团队介绍 成员姓名 任务分配 成员课程设计博客链接 兰泽祥(组长) 数据库,斗地主规则的实现,人机自动出牌的算法,实体类的设计 JAVA面向对象编程课程设计--web版斗地主 吴修恩 JSP界面的 ...

  5. JAVA面向对象编程课程设计——web版斗地主

    一.团队课程设计博客链接 JAVA面向对象编程课程设计--网络版单机斗地主 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记 ...

  6. java面向对象编程知识点总结

    一:今天完成 上午详细了解了java面向对象编程的一些细节,记录如下. 1)类 是一种引用类型,包含一个签名和一个主体,主体是放在花括号里面的成员,成员包括字段和方法,还有构造方法.初始化程序和嵌套类 ...

  7. JAVA学习(五):Java面向对象编程基础

    Java面向对象编程基础 面向对象(Object oriented programming,OOP)技术是一种强有力的软件开发方法,它採用数据抽象与信息隐藏技术,来使软件开发简单化,以达到代码重用的目 ...

  8. (一)如何理解java面向对象编程

    哲学中,事物总是螺旋式上升,波浪式前进.因而编程也逐渐向人类更容易理解的方向前进,多年来人们苦苦追求的编程境界 : 高扩展性(extensibility),高复用性(reuseable).java语言 ...

  9. java面向对象编程--第九章 多态和抽象

    9.1多态 在生物学中,是指一个生物或物种可以有多种不同的形式或阶段: 在OOP中,多态是指一个对象有多种形式的能力. 多态可以说是面向对象编程的精髓所在.java中之所以引入多态的概念,原因之一是它 ...

随机推荐

  1. Enable and Use Remote Commands in Windows PowerShell

    The Windows PowerShell remoting features are supported by the WS-Management protocol and the Windows ...

  2. 学习在requirejs下如何使用underscore.js模板

    近期在学习underscore.js 这个小而美的js库,是前端 MVC 框架backbone依赖库,他的模板方法主要应用场景是ajax交互过程到页面需要大量的字符串拼接,这部分如果一旦不够仔细就很容 ...

  3. 用Linux完成Oracle自动物理备份

    https://blog.csdn.net/24024846/article/details/115292

  4. python常用模块2

    collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict. ...

  5. js中cookie、sessionStorage、localStorage

    一.cookie <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  6. Jenkins构建完成后通过SVN Publisher Plugin上传文件到指定的SVN(教程收集)

    SVN Publisher Plugin:https://wiki.jenkins-ci.org/display/JENKINS/SVN+Publisher 构建完成后的文件,比如Maven打的war ...

  7. MAC终端命令行整理

    参考:http://www.jianshu.com/p/3291de46f3ff 目录操作 命令名 说明 举例 cd 切换到指定目录 cd test ls 查看这个目录下的所有文件 ls /Users ...

  8. 漫谈深度学习时代点击率预估技术进展 &&深度学习在推荐系统上的发展

    转载:https://www.infoq.cn/article/XA055tpFrprUy*0UBdCb https://www.zhihu.com/question/20830906/answer/ ...

  9. php 源码编译

    https://cyberpersons.com/2016/08/28/install-nginx-php-php-fpm-mysql-source-run-wordpress-site-ubuntu ...

  10. Swagger学习和实践

    Swagger学习和实践 学习了:https://www.cnblogs.com/zxtceq/p/5530396.html swagger 英 [ˈswægə(r)] 美 [ˈswæɡɚ] vi.昂 ...