前言: 

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

一、封装:

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

public class User {

    private Integer userID;

    private String userName;

    private String address;

    public Integer getUserID() {
return userID;
} public void setUserID(Integer userID) {
this.userID = userID;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
}
}

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

二、继承:

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

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

public class Person {
private Integer age; public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public void test(){
System.out.println("父类test方法");
} public void mowen(){
System.out.println("父类莫问方法");
}
}

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

public class User extends Person{

    private Integer userID;

    private String userName;

    private String address;

    public void test(){
System.out.println("子类test方法");
} public Integer getUserID() {
return userID;
} public void setUserID(Integer userID) {
this.userID = userID;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
}
}

  执行测试:

public class Test {

    public static void main(String[] args){
User user = new User();
user.setAge(12);
user.test();
user.mowen();
System.out.println(user.getAge());
}
}

  测试结果:

子类test方法
父类莫问方法
12 Process finished with exit code 0

  我们很清楚的看到子类中可以调用父类中的莫问()方法,且在子类中重写了父类的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 class Father {

   private Integer age;

   public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
}
public class Children extends Father{

    private String userName;

    public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
}
}

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

public class Test {

    public static void main(String[] args){
Father father = new Children();
father.setAge(22);
((Children) father).setUserName("逝清雪");
System.out.println(father.getAge() + "\n" + ((Children) father).getUserName());
}
}

  测试结果:

22
逝清雪 Process finished with exit code 0

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

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

public class Test {

    public static void main(String[] args){
Father father = new Children();
Children children = (Children) father;
children.setAge(22);
children.setUserName("逝清雪");
System.out.println(father.getAge() + "\n" + ((Children) father).getUserName());
}
}

  测试结果:    

22
逝清雪 Process finished with exit code 0

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

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

  

    

      

Java 面向对象的基本特征的更多相关文章

  1. Java面向对象的三大特征

    Java面向对象的三大特征 java面向对象的三大特征:“封装.继承.多态”.更多Java技术知识,请登陆疯狂软件教育官网.微信搜索微信号:疯狂软件,参加2015年优惠活动,有机会获得优惠劵和代金劵. ...

  2. Java面向对象的三大特征和五大原则

    Java面向对象的三大特征 封装 封装(Encapsulation)是指属性私有化,根据需要提供setter和getter方法来访问属性.即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问 ...

  3. JAVA面向对象:三大特征 封装讲解

    一.JAVA封装 1.封装的理解 封装是 JAVA 面向对象思想的 一 种特性,也是一种信息隐蔽的技术 2.封装的原则 将类中的某些信息隐藏起来,来防止外部程序直接访问,通过类中的方法实现对隐藏的信息 ...

  4. Java面向对象的三大特征详解

    一.封装(Encapsulation)       封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保 ...

  5. 封装是java面向对象编程三大特征之一。 简单的属性封装

    package com.cqvie.Hello; class Person { private int age; private String name; public void tell() {   ...

  6. Java面向对象的三个特征

    首先,Java面向对象的三大特征: 三大特征: ▪ 封装 ▪ 继承 ▪ 多态 首先面向对象的第一个特性 封装 : 封装:就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操 ...

  7. java面向对象特征 — 一句话概括

    java基础学习总结之基本特征,最开始学习的时候,是形而上的理解,用了3年多,再回头看,理解起来颇为顺理成章 语言学习大概就是这样一种规律,学习,不甚解,应用,应用,渐深入人心,回头一看,恍然一悟 最 ...

  8. Java面向对象编程:封装,继承,多态

    Java面向对象的三大特征: 封装:通过Java的类来实现数据和操作方法的封装,对外界可以将每一个Java类都视为一个黑箱,只需调用该黑箱提供的方法即可完成你想要的操作. 继承:通过类的继承,将统一的 ...

  9. 封装继承多态-java面向对象三大特征

    第七章  封装和继承 一.面向对象的三大特征 封装.继承.多态 二.封装 将类的属性(字段)设置为私有的(private),并添加getter/setter方法操作属性. 注意:get|set方法的固 ...

随机推荐

  1. 【小o地图Excel插件版】不止能做图表,还能抓58、大众点评网页数据...

    小o地图Excel插件版:一款基于Excel软件开发的地图软件,提供基于Excel表格进行地理数据挖掘.地理数据分析.地图绘制.地图图表等功能的工具类软件.具有易用.高效.稳定的特点,能够满足地理数据 ...

  2. Windows系统 应用或游戏 打开出现0xc000007b错误 解决方法

    1.使用directX修复工具(推荐) 标准版 增强版 标准版备用地址 增强版备用地址 2. 重新安装DirectX 9.0 安装包(安装包体积大) 微软官方离线安装包 摘录CSDN博客 运行游戏时出 ...

  3. .NET MVC 简单的插件式开发

    插件式开发的优势 1.提高软件的复用度 2.提高软件开发的并行性 3.缩短软件的研发周期.节约研发成本,带给程序开发人员更多的灵活性,产品在软件发布以后还可以添加新的插件和完善已有的功能. 4.方便软 ...

  4. java开发环境配置——IDEA SVN的使用

    一.安装svn客户端,在idea中配置svn 装小乌龟,TortoiseSVN ,就下图一个要注意的地方,这里默认 command line client tools是不安装的,选上.如果已经安装过了 ...

  5. ES10特性详解

    摘要: 最新的JS特性. ES10 还只是一个草案.但是除了 Object.fromEntries 之外,Chrome 的大多数功能都已经实现了,为什么不早点开始探索呢?当所有浏览器都开始支持它时,你 ...

  6. 手机端两端对齐,兼容ios,安卓

    .div-title p label{ text-align: justify; width: 18%; display: inline-block; text-align-last: justify ...

  7. 测者的性能测试手册:Web压力测试工具webbench

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: wget http:/ ...

  8. 测者的性能测试手册:快速安装LoadRunner Linux上的Generator

    安装和初始化 安装包 上传Linux.zip(LoadRunner Generator for Linux.zip,后台回复loadrunner获取下载地址),然后通过如下命令: unzip Linu ...

  9. JAVA 递归实现从n个数中选取m个数的所有组合

    这周Java课程有个小作业:Java递归实现从n个数中选取m个数的所有组合 代码如下: //其中 n 取 1,2,3,4,5 五个数, m 取 3 package javaText; public c ...

  10. Keepalived脑裂

    问题描述:开启防火墙后,Keepalived出现脑裂. 背景架构:两台centos7通过Keepalived实现高可用 问题具体表现形式:两台主机通过ip addr (ip  a)查看,发现两台主机都 ...