封装

顾名思义,就是将数据封装起来,提高数据的安全性。我们程序都是要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉,低耦合;仅暴露少量的方法给外部使用。

封装的关键字是 private。例如:

public class Tao{
private int age;
}
public static void main(String[] args){
Tao a=new Tao();
a.age//这里是直接报错的
}

a.name报错原因就是属性已经被私有化,外部无法直接使用。如果要操作私有化属性的话,就可以创建一个set,get方法。相当有给外部提供一个接口。

public class Tao{
private int age;
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
}
public static void main(String[] args){
Tao a=new Tao();
a.setAge(18);
}

由上可以看到,我们就可以通过一个set的方法进行赋值,get方法就是取值。

为了数据的一些有效性,我们可以在set方法里面进行一些数据验证

public class Tao{
private int age;
public void setAge(int age){
if(age>0&&age<110){
this.age=age;
}else{
this.age=18;
} }
public int getAge(){
return this.age;
}
}

上面可以看到,我对年龄进行了一个验证,传入的年龄值只能小于110岁和必须大于0岁,否则的话,我就给了一个默认值18。就不能像没有封装前,随便操作了吧。

然后总结一个封装的好处:

  • 提高程序的安全性,保护数据。
  • 隐藏代码的实现细节。
  • 统一接口。
  • 系统可维护增加了。

继承

继承(extands)的本质其实对某一类进行抽象化,继承是类与类之间的一种关系。除此之外,类与类之间还有依赖,组合,聚合等关系,继承关系的两个类,一个为子类(派生类),一个父类(基类),子类继承父类,关键词是extands来表示。子类和父类的关系从意义上讲具有 is a的关系。在java里面都是没有多继承,都是单继承。子类可以继承父类所有的属性和方法。但是如果父类属性设置了成私有的,子类那就继承不到。

  1. object类

    在java中,所有类都继承object类,只是Java给隐藏掉了,就像无参构造方法一样。

  2. super

    super关键字跟this关键字一样,不过this指的是当前本类,而super指的是父类。它可以调用父类的方法和属性。this和super不能同时调用构造方法,super只能出现在子类的方法或者构造方法中。

  3. 重写

    需要有继承的关系,子类重写父类的方法。

    • 方法名必须相同
    • 参数列表也必须相同
    • 修饰符范围可以扩大,但不能缩小
    • 抛出的异常范围可以缩小,但不能放大。
    • 方法体可以不同
    • static,final,private修饰的方法都不能被重写。

​ 为啥用重写呢,基本就是父类的满足不了子类的需求。

在普及一下重载,重载需要:

  • 方法名相同
  • 参数类型,个数,顺序不同
  • 返回类型可以相同,可以不同。

多态

即同一方法可以根据发送对象的不同而采取多种不同的行为方式。一个对象的实际类型是确定的,但是可以指向对象的引用类型却有很多。

多态存在的条件:

  • 有继承关系
  • 子类重写父类方法
  • 父类引用指向子类对象

注意:多态是方法的多态,属性没有多态性。

案例:

//动物类(父类)
public class animal {
public void eat(){
System.out.println("父类");
}
}
//狗类(子类)
public class dog extends animal{
@Override
public void eat() {
System.out.println("我在吃骨头");
}
}
//猫类(子类)
public class cat extends animal{
@Override
public void eat() {
System.out.println("我在吃鱼");
}
} //测试类
public class text {
public static void main(String[] args) {
animal c=new dog();
animal d=new cat();
c.eat();
d.eat();
}
}
输出结果是:
我在吃骨头
我在吃鱼

上面就是指的多态,父类的引用指向子类。由此可见,是不是多态可以使我们程序变得更加灵活。

Java oop三大特性(封装,继承,多态)的更多相关文章

  1. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  2. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  3. C++三大特性 封装 继承 多态

    C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...

  4. OOP三大核心封装继承多态

    OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...

  5. JAVA的三大特征 封装继承多态- 简单总结

    简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对 ...

  6. 【转】java提高篇(二)-----理解java的三大特性之继承

    [转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...

  7. 初步理解Java的三大特性——封装、继承和多态

    声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被 ...

  8. Java 浅析三大特性之一继承

    上文Java 浅析三大特性之一封装我们说到Java是一个注重编写类,注重于代码和功能复用的语言.Java实现代码复用的方式有很多,这里介绍一个重要的复用方式--继承. 在介绍继承之前,我们要明确一点, ...

  9. Java的三大特性之继承

    此处我会分为这几个部分来理解继承是怎么样的: 1.区分封装.继承和多态 2.区分限定词的范围 3.区分隐藏.覆盖.重载 4.继承的理解 5.一道面试题的原型 --------------------- ...

  10. java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

随机推荐

  1. Orchard Core 配置项说明

    Orchard Core使用IShellConfiguration扩展了ASP.NET Core IConfiguration,以允许在应用程序范围的配置之上进行特定于租户的配置.虽然本文档使用Orc ...

  2. Microfacet模型采样下的brdf

    本文前言 在学习图形学(games101 from bilibili)的时候,也遇到了像这样的问题,Cook-Torrance模型无法实现粗糙度为0时,物体微表面呈现绝对镜面的效果(呈现出一面镜子), ...

  3. P5287-[HNOI2019]JOJO【KMP】

    正题 题目链接:https://www.luogu.com.cn/problem/P5287 题目大意 开始一个空串,\(n\)个操作 在末尾加入\(x\)个\(c\)字符(保证和\(c\)和前面的字 ...

  4. es相关监控指标梳理

    ###################ElasticSearch监控指标梳理########################### #author:lugh1 # #date:2021-09-26 # ...

  5. TWAIN-v2.4-说明文档翻译(2)技术概览

    技术概览 Technical Overview TWAIN架构(TWAIN Architecture) 数据交互的实现在TWAIN中由三类软件元素共同工作完成:应用程序(the application ...

  6. mybatis 操作数据库(05)

    类型转换.动态排序,查询接口与mapper对应关系说明及其注意事项 一.MyBatis 自带写常见类型转换器.例如:java 类中 String 对应 mySQL中的varchar 二.自定义类型转换 ...

  7. Scrum Meeting 16

    第16次例会报告 日期:2021年06月11日 会议主要内容概述: 最后一次例会 一.进度情况 我们采用日报的形式记录每个人的具体进度,链接Home · Wiki,如下记录仅为保证公开性: 组员 负责 ...

  8. 软件案例分析——VS和VS Code

    软件案例分析--VS和VS Code 项目 内容 这个作业属于哪个课程/ 2020年春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里? 软件案例分析 我在这个课程的目标是? 提高代码水平,熟 ...

  9. [CSP-S 2021] 回文

    题目描述: 给定正整数 n 和整数序列 a1, a2,-,a2n,在这 2n 个数中,1, 2,-,n 分别各出现恰好 2 次.现在进行 2n 次操作,目标是创建一个长度同样为 2n 的序列 b 1, ...

  10. noip模拟11

    T1 math 就挺水一小破题目,第一眼看好像不可做,看着看着突然发现假设x和y的最大公约数是gcd,那么kx%y一定是gcd的倍数, 然后想到可以把所有数字与k的gcd求出来,打一个完全背包,可是仔 ...