Java oop三大特性(封装,继承,多态)
封装
顾名思义,就是将数据封装起来,提高数据的安全性。我们程序都是要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉,低耦合;仅暴露少量的方法给外部使用。
封装的关键字是 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里面都是没有多继承,都是单继承。子类可以继承父类所有的属性和方法。但是如果父类属性设置了成私有的,子类那就继承不到。
object类
在java中,所有类都继承object类,只是Java给隐藏掉了,就像无参构造方法一样。
super
super关键字跟this关键字一样,不过this指的是当前本类,而super指的是父类。它可以调用父类的方法和属性。this和super不能同时调用构造方法,super只能出现在子类的方法或者构造方法中。
重写
需要有继承的关系,子类重写父类的方法。
- 方法名必须相同
- 参数列表也必须相同
- 修饰符范围可以扩大,但不能缩小
- 抛出的异常范围可以缩小,但不能放大。
- 方法体可以不同
- 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三大特性(封装,继承,多态)的更多相关文章
- 深入理解Java面向对象三大特性 封装 继承 多态
1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...
- Java三大特性(封装,继承,多态)
Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...
- C++三大特性 封装 继承 多态
C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...
- OOP三大核心封装继承多态
OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...
- JAVA的三大特征 封装继承多态- 简单总结
简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对 ...
- 【转】java提高篇(二)-----理解java的三大特性之继承
[转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...
- 初步理解Java的三大特性——封装、继承和多态
声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被 ...
- Java 浅析三大特性之一继承
上文Java 浅析三大特性之一封装我们说到Java是一个注重编写类,注重于代码和功能复用的语言.Java实现代码复用的方式有很多,这里介绍一个重要的复用方式--继承. 在介绍继承之前,我们要明确一点, ...
- Java的三大特性之继承
此处我会分为这几个部分来理解继承是怎么样的: 1.区分封装.继承和多态 2.区分限定词的范围 3.区分隐藏.覆盖.重载 4.继承的理解 5.一道面试题的原型 --------------------- ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
随机推荐
- php 的一些问题
------------------------------------------------------------------------------ * 绝对路径转化为相对路径 <?ph ...
- spl_autoload_register 实现自动加载
spl_autoload_register 注册给定的函数作为 __autoload 的实现 bool spl_autoload_register ([ callable $autoload_func ...
- 『GoLang』面向对象
我们总结一下前面看到的:Go 没有类,而是松耦合的类型.方法对接口的实现. 面向对象语言最重要的三个方面分别是:封装,继承和多态,在 Go 中它们是怎样表现的呢? Go实现面向对象的两个关键是stru ...
- Redis-Cluster分片扩容
redis分片分片场景在业务量相对较小的时候,可以将所有数据都存到一台机器上,只使用redis单机模式,不存在分片问题.如果业务的数据量超过一台物理机器的内存大小时,则会面对扩展问题,需要多台机器去存 ...
- 在反序列化数据的时候报错raise JSONDecodeError("Expecting value", s, err.value) from None json.decode
今天在爬取某网站数据内容适合,通过正则匹配拿到了需要的内容字符串,但是在反序列化的时候竟然报错,大概意思知道他不是json的期望值,那么我就会像是不是数据内有一些内容是由于编码的问题导致的呢?因为之前 ...
- vivo全球商城-营销价格监控方案的探索
一.背景 现在日常官网商城的运营中有一定概率出现以下两个问题: 1)优惠信息未对齐 官网商城促销优惠的类型越来越多,能影响最终用户实付价的优惠就有抢购.满减.优惠券.代金券等.实际业务操作中存在不同促 ...
- openlayer 4326与3857坐标互转之Java版
public class Transform { private static final double PI = Math.PI; private static final double merca ...
- 从零入门 Serverless | 使用 Spot 低成本运行 Job 任务
作者 | 代志锋(云果) 阿里云技术专家 本文整理自<Serverless 技术公开课>,点击链接即可免费听课:https://developer.aliyun.com/learning ...
- 题解 Weak in the Middle
题目传送门 Description 有一个长度为 \(n\) 的序列 \(a_{1,2,...,n}\) ,每次可以删掉 \(a_i\),当 \(\min(a_{i-1},a_{i+1})>a_ ...
- java实现责任链模式的小demo
//一个请假请求 public class LeaveRequest { private int leaveDays; private String name; public void leave() ...