封装

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

封装的关键字是 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. redis代替mybatis做缓存

    将redis作为缓存 <dependencies> <dependency> <groupId>org.springframework.boot</group ...

  2. mysql where in 数组解决小tips

    由于sql语法要求,不可在in后面直接连数组,若数组形式下,则需要转换成逗号隔开的字符串 <?php$arr = array(1,2,3,4,5);$arr_string= join(',', ...

  3. Kafka 性能篇:为何 Kafka 这么快?

    『码哥』的 Redis 系列文章有一篇讲透了 Redis 的性能优化 --<Redis 核心篇:唯快不破的秘密>.深入地从 IO.线程.数据结构.编码等方面剖析了 Redis " ...

  4. CF1556D-Take a Guess【交互】

    正题 题目链接:https://codeforces.com/contest/1556/problem/D 题目大意 现在有\(n\)个你不知道的数字,你有两种询问操作 询问两个下标的数字的\(and ...

  5. YbtOJ#893-带权的图【高斯消元,结论】

    正题 题目链接:https://www.ybtoj.com.cn/problem/893 题目大意 给出一张\(n\)个点\(m\)条边的无向联通图,每条边正反向各有\(A,B,C\)三种边权. 保证 ...

  6. python操作Redis方法速记

    redis有5种数据结构,分别如下: 5种数据结构 python语言对5种数据结构的增删改查 全局函数 redis 连接 import redis pool = redis.ConnectionPoo ...

  7. Excel备忘录

    1. 导入文本文件(.txt) 2. 排序 3. 批量填充空白 选定区域,Ctrl+G,定位,空值. 输入内容,Ctrl+Enter. 4. 清除无法修改的背景色. 5. 身份证号 数字精度为15位, ...

  8. html2canvas 无法渲染网络图片及本地 解决方案

    使用html2canvas插件可以无法渲染图片的情况 在使用html2canvas的时候.如果元素中还包含网络图片.那么有很大的几率渲染不出来.即时把html2canvas的允许跨域打开也无济于事.这 ...

  9. 感恩笔记之SQL语句操纵数据集基本功能模板

    SQL查询_基本功能 一 SQL语句整体架构 SELECT --1 查询数据表 INTO --2 新建数据表 FROM --3 查询数据表 WHERE --4 筛选数据表 ORDER BY --5 排 ...

  10. 题解 「2017 山东一轮集训 Day5」苹果树

    题目传送门 题目大意 给出一个 \(n\) 个点的图,每个点都有一个权值 \(f_i\) ,如果 \(f_i=-1\) 表示 \(i\) 这个点是坏的.定义一个点是有用的当且仅当它不是坏的,并且它连的 ...