Java面向对象编程(一)
JAVA 面向对象编程
2023-09-14 09:09:01 时间
由于常常将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; } }
- 每一个类有且仅有一个直接父类,但能够实现多个接口
- 当前定义的类的构造方法必须在其第一句调用其直接父类的构造方法。格式为:
super(參数列表);
假设程序猿没有进行显式调用,则JVM会自己主动隐式调用不带不论什么參数的父类构造方法,即:super() - 子类和父类之间能够进行类型转换
(1) 将子类型数据转换为父类型数据能够直接採用隐式类型转换
(2) 将父类型数据转换为子类型数据须要採用强制类型转换,且要保证执行时的正确性。
// correct Teacher tom = new Teacher(); Employee a = tom; Teacher b = (Teacher) a; // runtime error Employee a = new Employee(); Teacher b = (Teacher) a;
- 能够用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(); } }
- 在子类中定义与父类中同名的成员域不仅与多态性没有关系。并且不提倡
- 能够用superkeyword调用父类中被屏蔽的成员方法和成员域,即:super.xxx
- 动态多态性仅仅针对非静态的成员方法,即静态成员方法不具有动态多态性:当在子类和父类的类体中定义了具有全然同样声明的静态成员方法。且类型为父类的变量a指向子类的实例对象时,通过变量a调用该静态成员方法将调用在父类类体中定义的静态成员方法。
三. 封装性
这里主要须要搞清楚类成员的訪问控制模式及相应的訪问范围,例如以下表:
* 上述图片来自《Java程序设计教程》 第2版。雍俊海编著
至此,Java中面向对象的三大特性讨论完成,下一篇博客将会讨论抽象类、接口和内部类等内容。
相关文章
- java oracle分页查询语句_oracle 分页语句
- java wsdl asmx 替换_WebService asmx生成的wsdl 修改 location
- java图书馆新地址_值得你关注的16个顶级 Java 开源项目!小白必看
- java notifyall_Java Thread notifyAll()方法[通俗易懂]
- Java接口是什么意思_JAVA接口
- java创建线程池的几种方式_Java中的线程池
- 带你详细了解AES算法《附带java、vue实现》
- 开心档之Java ArrayList
- java设计模式之解释器模式详解架构师
- Java处理HTTP请求的相关代码详解编程语言
- Java date 日期计算详解编程语言
- 服务器实现Java远程访问Linux服务器(java远程linux)
- 学习Linux,开启Java之旅(linuxjavaws)
- Java操作Redis设置定时过期(redisjava过期)
- 数据挖掘Redis中Java过期数据的威力(redisjava过期)
- Java实现Redis数据写入(java写入redis)
- 使用Java实现Redis数据存储(redis集成java)
- Java与Oracle的连接方式(java连oracle)
- 使用Java远程控制Linux 实现简单、高效的服务器管理(java控制linux)
- Java和Redis的配合安装方法(java redis安装)
- Linux下Java命令的使用方法简介(linux下java命令)
- Java与MySQL事务处理(mysql中java事物)
- 询Java与Oracle联合查询更高效的数据处理方式(java oracle查)