由于常常将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. 完全平方数(bzoj 2440)

    Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而这丝毫不影响他对其他数的热爱. 这天是 ...

  2. noip 2010 关押罪犯 二分答案+二分图染色 || 并查集

    题目链接 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值&q ...

  3. 【MFC】设置窗口焦点

    BOOL CTMSDlg::OnInitDialog() { ...... ...... //设置窗口焦点,注意return TRUE 改成 return FALSE GetDlgItem(IDC_E ...

  4. iOS8下定位问题解决

    项目是以前iOS7的,升级iOS8后,无法成功获取用户位置.后来才发现iOS8 使用定位需要在infoplist文件中加2个key,然后manager需要加一个方法,指定定位授权机制   在plist ...

  5. Python Challenge 第五关

    进入第五关,一张图和一行提示: pronounce it.右键源代码,只有一行注释: <!-- peak hell sounds familiar ? --> peak hell 听起来熟 ...

  6. asp传递参数的几种方式

    把下列代码分别加入a.asp和b.asp的<body></body>中,点提交,就可以将a.asp文本框的内容传给b.asp并显示出来 a.ASP <form actio ...

  7. 【APIO2015】Bali Sculptures

    题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 $N$ 座雕塑,为方便起见,我们把这些雕塑从 $1$ 到 $N$ 连续地进行标号,其中第 $i$ 座雕塑的年 ...

  8. Java调用Python程序

    最近,需要在应用中,需要使用Java程序去调用Python代码,主要有两种实现方式. 一.使用Jython架包 因为调用的Python代码中需要使用Json对象,开始使用jython2.5.2,发现不 ...

  9. CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 7.0'

    这个一般是证书设置的问题, 在build settings中找到 Code Signing->Code Signing Identity修改成有效的证书即可

  10. iOS -- MBProgressHUB

    高级: http://www.jianshu.com/p/485b8d75ccd4 //只有小菊花 - (void)indeterminateExample { // Show the HUD on ...