前言:

在刚开始接触Java的时候,那时候面对Java面向对象的几大特征一直理解的不是很理解,借着空闲时间在这里整理一下,同时在加深一下印象。

一、封装:

Java面向对象的特征之封装,所谓的封装就是指一个类把自己内部的实现细节隐藏,对外提供set/get方法,封装又分为属性的封装和方法的封装。把属性定义为私有的,它们通过setter和getter方法来对属性的值进行设定和获取,在我们实际的代码开发正分装用到的地方非常广泛,举个最简单的例子就是我们的pojo

public classUser {privateInteger userID;privateString userName;privateString address;publicInteger getUserID() {returnuserID;

}public voidsetUserID(Integer userID) {this.userID =userID;

}publicString getUserName() {returnuserName;

}public voidsetUserName(String userName) {this.userName =userName;

}publicString getAddress() {returnaddress;

}public voidsetAddress(String address) {this.address =address;

}

}

View Code

在上面类中,定义了三个成员变量,它们的访问修饰都是private私有的,通过setter和getter方法对这些变量进行设值以及取值。那么这么做有什么好处呢?封装的意义就是增强类的信息隐藏与模块化,提高安全性。封装的主要作用也是对外部隐藏具体的实现细节,增加程序的安全性。

二、继承:

在Java中如果现有类无法满足我们所需的字段或方法时、同时我们又不想或无法更改现有类是,这时我们则需要重新创建一个新的类同时继承之间的类,新创建的类我们称为(子类),子类可以拥有父类的成员变量以及成员方法(非私有)继承的作用就是能提高代码的复用性。子类拥有父类中的一切,它可以访问和使用父类中的非私有成员变量,以及重写父类中的非私有成员方法。

定义一个父类Person其中有如下方法和字段:

public classPerson {privateInteger age;publicInteger getAge() {returnage;

}public voidsetAge(Integer age) {this.age =age;

}public voidtest(){

System.out.println("父类test方法");

}public voidmowen(){

System.out.println("父类莫问方法");

}

}

View Code

定义一个子类User并且继承Person类:

public class User extendsPerson{privateInteger userID;privateString userName;privateString address;public voidtest(){

System.out.println("子类test方法");

}publicInteger getUserID() {returnuserID;

}public voidsetUserID(Integer userID) {this.userID =userID;

}publicString getUserName() {returnuserName;

}public voidsetUserName(String userName) {this.userName =userName;

}publicString getAddress() {returnaddress;

}public voidsetAddress(String address) {this.address =address;

}

}

View Code

执行测试:

public classTest {public static voidmain(String[] args){

User user= newUser();

user.setAge(12);

user.test();

user.mowen();

System.out.println(user.getAge());

}

}

View Code

测试结果:

子类test方法

父类莫问方法12Process finished with exit code0

View Code

我们很清楚的看到子类中可以调用父类中的莫问()方法,且在子类中重写了父类的test()方法,执行结果以子类为准,且子类继承了父类的字段age。

三、抽象:

当一个类中有一个abstract修饰符(但要注意只要有抽象方法的类就是抽象类)、父类中存在抽象方法(也可以没有)抽象方法没有方法体并且修饰符一定要是public或者protected,且抽象类不能不能实例化

所有子类都必须实现这些抽象方法(如果没实现就必须把它也定义成一个抽象方法) 虽然不能new出来但是它可以有自己的static方法。

抽象类中可以定义抽象方法和不同方法,也可以定义变量,但如果抽象类存在抽象方法(注:抽象方法不能用private私有化),继承他的子类必须要实现该方法,否则编译就无法通过

四、多态:

在面向对象的四个基本特征中多态是非常重要的,同时相比较其他的特征稍微复杂一点,下面就重点说一下Java中的多态

多态存在的必要条件:

1、有继承关系

2、子类重写父类方法

3、父类引用指向子类对象

多态存在必须要有“子类重写父类方法”这一条件,name就要注意下面三种情况是没有办法表现出多态特性的(因为不能被重写):

1、static方法,因为被static修饰的方法是属于类的,而不是属于实例的

2、final方法,因为被final修饰的方法无法被子类重写

3、private方法和protected方法,前者是因为被private修饰的方法对子类不可见,后者是因为尽管被protected修饰的方法可以被子类见到,也可以被子类重写,但是它是无法被外部所引用的,一个不能被外部引用的方法,怎么能谈多态呢

先来编写两个类Father、Children,同时Children继承Father类

public classFather {privateInteger age;publicInteger getAge() {returnage;

}public voidsetAge(Integer age) {this.age =age;

}

}

View Code

public class Children extendsFather{privateString userName;publicString getUserName() {returnuserName;

}public voidsetUserName(String userName) {this.userName =userName;

}

}

View Code

向上转型:(子类进行类的提升转换为父类)

public classTest {public static voidmain(String[] args){

Father father= newChildren();

father.setAge(22);

((Children) father).setUserName("逝清雪");

System.out.println(father.getAge()+ "\n" +((Children) father).getUserName());

}

}

View Code

测试结果:

22逝清雪

Process finished with exit code0

View Code

通过测试我们可以发现,当子类进行类的提升后,原本父类(Father)中并没有UserName字段,而UserName这个字段原本是出现在子类中的,但现在父类却可以对子类的中的字段进行操作,由此可以看出:多态中的向上转型后,父类拥有了子类的特性,换句话说,向上转型后还是子类自己本身。

向下转型:(在java中Children c = new Father()是无法编译通过的,在这里必须强行转换)

public classTest {public static voidmain(String[] args){

Father father= newChildren();

Children children=(Children) father;

children.setAge(22);

children.setUserName("逝清雪");

System.out.println(father.getAge()+ "\n" +((Children) father).getUserName());

}

}

View Code

测试结果:

22逝清雪

Process finished with exit code0

View Code

向下转型,我们必须要进行强转,同时可以看到子类可以操作父类中的字段,由此可以看出:向下转型子类拥有了父类的特性,

由此我们可以看出:在Java中的多态不管是向上转型、还是向下转向,最后都还是子类本身。

java面向对象基本特征_Java 面向对象的基本特征相关推荐

  1. java公社博客_Java面向对象开发学习笔记(一)

    Java面向对象开发 共105课时 课时1 面向对象简介 面向对象是一种程序设计方法,但是并不是所有开发者都认同面向对象,因为很多开发者认为面向对象过于复杂,所以更多人愿意使用函数式编程. 面向对象的 ...

  2. java类的心得_java面向对象学习心得3篇

    日记网 >> 专题 java面向对象学习心得3篇 更新时间:2018/6/15 8:27:00  点击率:937  手机版 java面向对象学习心得3篇来自简单日记网精选推荐.在面向对象的 ...

  3. java面对对象教学_Java面向对象程序设计教与学

    原标题:Java面向对象程序设计教与学 面向对象程序设计(Object Oriented Programming,OOP)主要研究如何从对象的角度出发构建程序单元以及程序开发机制,主要内容包括抽象的技 ...

  4. java面向对象的教程_java面向对象入门教程

    java面向对象入门教程 Java 编程语言的风格十分接近C.C++语言.Java是一个纯的面向对象的程序设计语言,以下是小编为大家搜索整理的java面向对象入门教程,希望能给大家带来帮助!更多精彩内 ...

  5. java面向对象认定的特征_Java面向对象的三大特征(一)

    在Java的学习和使用过程中都要面对一个问题--->对象.我们程序员是最不缺对象的,需要时就new一个,简单.方便.快捷.在生活中任何人都不能说Java程序员没对象,因为我们可以随时new出一个 ...

  6. java 抽象封装多态_java面向对象(封装,继承,多态,抽象,接口的定义和实现)...

    1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...

  7. java面向对象怎么学_Java面向对象入门

    Java面向对象入门 一.Java面向对象的基本组成 Java类及类的成员:属性.方法.构造器:代码块.内部类 面向对象三大特征:封装.继承.多态(抽象) 关键字:this.super.static. ...

  8. java公社博客_Java面向对象开发学习笔记(二)

    课时4 类与对象(对象内存分析) 如果要想进行对象的产生分析,首先就必须清楚引用类型.引用类型指的是内存空间的操作.而对于现在的内存,我们主要使用两块内存空间: 堆内存空间:保存真正的数据,堆内存保存 ...

  9. java 动态称重_Java面向对象 --2

    22.面向对象特征之二: 继  承     2020-04-29  21:39:33 01.多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么子类无需再定义这些属性和行为,只要继承父类即 ...

最新文章

  1. [转]苹果iOS 5限制应用本地存储问题
  2. javascript脚本实现浏览器自动点击(阿里员工秒杀月饼)
  3. Kubernetes + CRI + Kata + Firecracker
  4. php dirname(__FILE__)
  5. log4j 2.x 架构(源码)
  6. rm: 无法删除swap: 不允许的操作_safe-rm老板再也不用担心我删库跑路啦[视频]
  7. java(线程特性,Volatile作用,java内存模型)
  8. 操作系统--文件管理
  9. Visio是一个很好的UML建模软件和一个很好的制图软件
  10. Dubbo介绍前篇------单一应用框架、垂直应用框架、分布式应用框架、流动计算框架,及RPC的简介
  11. java虚拟机 安卓系统下载_java虚拟机下载 v5.0 官方免费版
  12. 锦锐单片机开发工具_飞思卡尔单片机PE开发工具硬件及软件
  13. 什么是BIM,什么是CIM?
  14. 单价数量和总价的公式_小学数学基础公式:单价数量总价公式(十二)
  15. 别被别人抢走了你的时间!
  16. 数学建模之拉依达准则
  17. 设计模式——七大原则
  18. 与传统计算相比,云计算具有哪些优势?
  19. Windows程序开机自启动(图文详解,命令快速打开目录)
  20. 冯宝宝说:Spring

热门文章

  1. 除了Pepper,你还能买这些深情款款的机器人
  2. PS混合模式:解读图层混合模式中的高级混合功能
  3. 期货和远期价格(期货和远期价格的定价结果的无套利证明)
  4. 如何在iOS应用中更好的调试H5页面
  5. 伸手系列-苹果apple退款-java
  6. 《重庆高教研究》投稿经验分享
  7. DM8达梦数据库物理备份方法详细
  8. P1734 最大约数和 01背包变形
  9. excel转换成pdf格式怎么操作?这3招教你Excel怎么转PDF
  10. 软件工程笔记(十一)