【Java基础】Java面向对象的三大特性,你了解多少?

大家好,我是程序员青戈,一个被Bug耽误了才艺的程序员👦专注于Java领域的知识分享和技术交流,每天会给大家带来Java学习的干货教程📚

微信搜索公众号 Java学习指南,回复 面试 领取一线大厂面试题一套😋加号主微信 xia_qing2012,可以进技术交流学习群一起共同进步哦😊


Java面向对象,有三大特性,下面一个一个细细展开。

封装

public、private、protected修饰符

说到封装,Java 中有三个访问权限修饰符:private、protected 以及 public,如果不加访问修饰符,表示包级可见。我们先来看下这三个修饰符的作用。

修饰符当前类同包子类其他包
public
protected×
default××
private×××

设计良好的模块会隐藏所有的实现细节,把它的 API 与它的实现清晰地隔离开来。模块之间只通过它们的 API 进行通信,一个模块不需要知道其他模块的内部工作情况,这个概念被称为信息隐藏或封装。因此访问权限应当尽可能地使每个类或者成员不被外界访问。

如果子类的方法重写了父类的方法,那么子类中该方法的访问级别不允许低于父类的访问级别。这是为了确保可以使用父类实例的地方都可以使用子类实例去代替,也就是确保满足里氏替换原则。

规范

字段决不能是公有的,因为这么做的话就失去了对这个字段修改行为的控制,客户端可以对其随意修改。例如下面的例子中,AccessExample 拥有 id 公有字段,如果在某个时刻,我们想要使用 int 存储 id 字段,那么就需要修改所有的客户端代码。

public class AccessExample {
    public String id;
}

可以使用公有的 getter 和 setter 方法来替换公有字段,这样的话就可以控制对字段的修改行为。

public class AccessExample {

    private int id;

    public String getId() {
        return id + "";
    }

    public void setId(String id) {
        this.id = Integer.valueOf(id);
    }
}

封装的好处

  1. 提高数据的安全性。
  2. 操作简单。
  3. 隐藏了实现。

继承

继承是类与类的一种关系,是一种“is a”的关系。比如“狗”继承“动物”,这里动物类是狗类的父类或者基类,狗类是动物类的子类或者派生类。如下图所示:

注:java中的继承是单继承,即一个类只有一个父类。

继承的初始化顺序

  1. 初始化父类再初始化子类
  2. 先执行初始化对象中属性,再执行构造方法中的初始化。

基于上面两点,我们就知道实例化一个子类,java程序的执行顺序是:

父类对象属性初始化---->父类对象构造方法---->子类对象属性初始化—>子类对象构造方法

继承这块大家都比较熟,我来举个例子:

继承示例

Animal动物:

public class Animal {
    /**名称*/
    public String name;
    /**颜色*/
    public String color;
    
    /**显示信息*/
    public void show(){
        System.out.println("名称:"+name+",颜色:"+color);
    }
}

Dog狗:

/**狗继承自动物,子类 is a 父类*/
public class Dog extends Animal {
    /**价格*/
    public double price;
}

dog并没有定义color属性,但在使用中可以调用,是因为dog继承了父类Animal,父类的非私有成员将被子类继承。如果再定义其它的动物类则无须再反复定义name,color与show方法。

多态

多态这块,我要跟大家好好唠叨唠叨,首先来看下概念:

多态概念

多态:一个对象具备多种形态。
①父类的引用类型变量指向了子类的对象
②接口的引用类型变量指向了接口实现类的对象

多态的前提:必须存在继承或者实现关系。

动物 a  = new();

多态要注意的细节

  1. 多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量。
  2. 多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数。
  3. 多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数。
  4. 多态情况下,不能访问子类特有的成员。

总结:多态情况下,子父类存在同名的成员时,访问的都是父类的成员,除了在同名非静态函数时才是访问子类的。

注意:java编译器在编译的时候,会检查引用类型变量所属的类是否具备指定的成员,如果不具备马上编译报错。(编译看左边)

多态的应用

  1. 多态用于形参类型的时候,可以接收更多类型的数据。
  2. 多态用于返回值类型的时候,可以返回更多类型的数据。

多态的好处: 提高了代码的拓 展性。

我们想想,平时写MVC三层模型的时候,service为什么要写接口呢?因为可能有个service会有多种不同的实现。service就是我们平时用多态最多的地方。


关于作者

程序员青戈,5年一线Java开发经验,先后在IBM、阿里、科大讯飞踩坑~

微信搜索:Java学习指南 关注我的原创公众号

感谢大家的阅读,创作不易,能否请您小手点一点下方的 一键三连 支持一下作者呢😊谢谢~

  • 33
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 36
    评论
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员青戈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值