Java面向对象概述及三大特征(封装,继承和多态)
一、面向对象思想
Java是面向对象的高级语言,对于Java语言来说,万事万物皆对象!
它的基本思想是使用类,对象,继承,封装,消息等基本概念进行程序设计。面向对象程序的最小单元是类,类代表了客观世界中具有某一特征的一类事物,封装了这类事物所具有的属性和行为。
所以,类定义=成员变量(属性)+方法(行为)。
面向对象程序设计与人类的思维习惯一致,比如希望完成“兔子吃草"
这件事:
在面向过程的程序设计里,一切以函数为中心,则会用如下语句来表达:
吃(兔子,草);
而在面向对象程序设计里,一切以对象为中心,则会用如下语句来表达:
兔子.吃(草);
对比这两条语句可以看出,面向对象语句更接近自然语言语法,主谓宾一目了然。
二、类与对象的关系
类是对象的抽象,对象则是类的实例,一个类可以生成多个对象。对一个类定义而言,包含三种最常见的成员:构造器、成员变量和方法,而构造器是一个类创建对象的根本途径,如果一个类没有构造器则无法创建实例。因此,如果程序员没有为一个类创建构造器,则系统会为该类提供一个默认无参的构造器。下面定义一个简单的Person类:
public class Person{
//定义两个成员变量:姓名和年龄
public String name;
public int age;
//定义一个say方法
public void say(String content){
System.out.println(content);
}
}
定义类之后就可以通过Person p = new Person()来创建对象了,Person对象赋给了p变量,它们在内存中的存储示意图如下:

三、面向对象的三个基本特征(封装,继承和多态)
1、封装
封装是指将对象的实现细节隐藏起来,对外提供公共访问方法,将对象的功能暴露出来。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
适当的封装可以让程式码更容易理解与维护,也加强了程序代码的安全性。最终目的是实现模块设计的”高内聚低耦合“。
那么,如何实现java的封装呢?首先来看一下java的访问控制级别:
Java提供了4个访问控制级别,由小到大如下图:


从上图可以得出,实现一个类封装的步骤如下:
♦ 修改属性的可见性(访问级别)来限制对属性的访问(一般限制为private),例如:
/**
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
*/
public class Person {
private String name;//姓名
private int age;//年龄
}
♦ 对每个值属性提供对外的公共方法访问,也就是创建一对赋值取值的方法,用于对私有属性的访问,例如:
public class Person{
private String name;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public void setName(String name){
this.name = name;
}
}
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突,this指当前对象。
因此,一个类定义时,一般用private修饰成员变量,public修饰成员方法。获取成员变量应该用对象.get变量名()而不是对象.成员变量名。
2、继承
我们生活中有很多继承的例子:如兔子属于动物的一种,兔子有一般动物的特征及行为,在java语言里可以说兔子继承动物,兔子是子类,动物是父类;学生和老师都属于人类,有人的一般特性,所以在java语言里可以说学生和老师继承人类。所以继承需要符合的关系是:is-a,父类更通用,子类更具体。

继承是指子类可以复用父类的属性和方法,Java的继承是单继承,每个子类只有一个直接父类。Java的继承通过extends关键字实现,实现继承的类称为子类,被继承的类称为父类(基类或超类)。Java继承语法格式如下:
修饰符 class SubClass extends SuperClass{
//类定义部分
}
需要注意的是 Java 不支持多继承,但支持多重继承。

子类包含与父类同名方法的现象称为方法重写,也称为方法覆盖。
方法的重写要遵循“两大两小一大”规则,“两同”即方法名相同、形参列表相同;“两小”指子类方法返回值类型应该比父类方法返回值类型要小或相等,子类方法声明抛出的异常应该比父类方法声明抛出的异常类要小或相等;“一大”指子类方法的访问权限应比父类方法的访问权限更大或相等。
3、多态
多态是指子类对象可以直接赋给父类变量(父类引用指向子类对象),但运行时依然表现出子类的行为特征,也就是说,同一类型的对象在执行同一个方法时,可能表现出多种行为特征。
多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象
比如:Parent p = new Child();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
下面举一个多态的例子:
public class Test {
public static void main(String[] args) {
show(new Cat()); // 以 Cat 对象调用 show 方法
show(new Dog()); // 以 Dog 对象调用 show 方法
Animal a = new Cat(); // 向上转型
a.eat(); // 调用的是 Cat 的 eat
Cat c = (Cat)a; // 向下转型
c.work(); // 调用的是 Cat 的 work
}
public static void show(Animal a) {
a.eat();
// 类型判断
if (a instanceof Cat) { // 猫做的事情
Cat c = (Cat)a;
c.work();
} else if (a instanceof Dog) { // 狗做的事情
Dog c = (Dog)a;
c.work();
}
}
}
abstract class Animal {
abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
public void work() {
System.out.println("抓老鼠");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
public void work() {
System.out.println("看家");
}
}
执行以上程序,输出结果为: 吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠
如需转载,请注明作者(冰湖一角)和链接 https://www.cnblogs.com/bingyimeiling/p/10232605.html
欢迎关注微信公众号【Java典籍】,收看更多Java技术干货!
▼微信扫一扫下图↓↓↓二维码关注

Java面向对象概述及三大特征(封装,继承和多态)的更多相关文章
- JAVA的三大特征 封装继承多态- 简单总结
简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对 ...
- Java面向对象概述和三大特性
Java 是面向对象的高级编程语言,类和对象是 Java 程序的构成核心.围绕着 Java 类和 Java 对象,有三大基本特性:封装是 Java 类的编写规范.继承是类与类之间联系的一种形式.而多态 ...
- 面向对象(OPP)的三大特征之 继承
OPP(面向对象编程的缩写)的三大优势: 1.继承 2.封装 3.多态 一.继承 1.继承:是两个对象之间的一种关系 a继承b 例如王思聪继承王健林 在OPP中继承是描述类与类之间的一种关系 2.继承 ...
- Java面向对象笔记 • 【第3章 继承与多态】
全部章节 >>>> 本章目录 3.1 包 3.1.1 自定义包 3.1.2 包的导入 3.1.3 包的访问权限 3.1.4 实践练习 3.2 继承 3.2.1 继承概述 3 ...
- Java面向对象理解_代码块_继承_多态_抽象_接口
面线对象: /* 成员变量和局部变量的区别? A:在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明上 B:在内存中的位置不同 成员变量:在堆内存 局部变量:在栈内存 C:生 ...
- Java 抽象类与oop三大特征
面向对象主要有三大特性:继承和多态.封装. 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象方法的声明格式为: abstract voi ...
- Java的OOP三大特征之一——继承
Java的OOP三大特征之一——继承 子类继承父类的特征和行为(属性和方法),使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类 ...
- Java 面向对象概述原理: 多态、Object类,转型(8)
Java 面向对象概述原理: 多态.Object类,转型(8) http://docs.oracle.com/javase/tutorial/java/IandI/override.html Java ...
- objective-c自学总结(三)---面向对象的封装,继承与多态
面向对象的三大特性 封装 继承 多态 1.封装: 隐藏属性,方法或实现细节的过程称为封装 信息隐藏,隐藏对象的实现细节,不允许用户看到 将东西包装在一 然后以新的完整形式呈现出来 例如,两种或多种化学 ...
随机推荐
- Ubuntu安装和卸载.bundle格式的VMware
本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=628 前言: 本文中用于演示的.bundle文件是VMware-Workstation-Full-14.1.1-75 ...
- SVN使用教程2017.10.6
http://www.cnblogs.com/mq0036/p/5250198.html
- ES6-LET,变量提升,函数提升
1:let命令 ①类似var,但只在let所在代码块内有效 ②不存在变量提升 ③暂时性死区(TDZ)—有let命令时,在此命令前都没法使用此变量 ④不允许重复声明 ⑤ES6允许块级作用域任意嵌套 ⑥E ...
- js文件引用的问题顺带复习css引用
js文件包含在<script>块中用scr引用,css在link和@import来引用,css不是本篇的重点,直接引用一个博主的总结: “ 区别1:link是XHTML标签,除了加载CSS ...
- tesseract-ocr识别英文和中文图片文字以及扫描图片实例讲解
本文来源:http://blog.csdn.net/wanghui2008123/article/details/37694307 本文参考http://blog.sina.com.cn/s/blog ...
- javascript进阶
BOM操作 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <met ...
- 如何通过织云 Lite 愉快地玩转 TSW
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 织云 Lite & TSW 织云 Lite 是一款轻量型服务管理平台,提供标准化的应用打包操作,可连接持续集成系统,完成线上程序分发 ...
- css 模拟radio的样式
1.input 默认的 type 为 radio的样式,在具体场合中的改造 默认的样式这样: 但是我要这样的: 这样看来是不是比原来的好看多了. 2.优化radio的样式 <span class ...
- UOJ182 a^-1 + b problem 解题报告
题目描述 有一个长度为\(n(n\le 10^5)\)的数列,在模\(M\)意义下进行\(m(m \le50000)\)次操作,每次操作形如以下两种形式: 1 \(x\) 表示每个数加\(x(0 \l ...
- BZOJ_3687_简单题_bitset
BZOJ_3687_简单题_bitset Description 小呆开始研究集合论了,他提出了关于一个数集四个问题: 1.子集的异或和的算术和. 2.子集的异或和的异或和. 3.子集的算术和的算术和 ...