Java的封装和继承

举报
黄生 发表于 2021/07/25 17:36:16 2021/07/25
【摘要】 封装就是把属性都隐藏,为了安全性。比如,你口袋里有100块钱,看做你的属性,别人如果可以直接把钱就拿走,就不安全。高内聚,就是类的内部数据操作细节由自己完成,不允许外部干涉;低耦合:仅暴露方法给外部使用。这样说来,属性都要隐藏,也就是要用private来修饰。那么,继承的时候,这些属性都无法继承了。所以,封装的理念,和继承的理念,是有矛盾的。这么说对吗?显然是不对的,那么哪里不对呢?关于继承...

封装就是把属性都隐藏,为了安全性。比如,你口袋里有100块钱,看做你的属性,别人如果可以直接把钱就拿走,就不安全。
高内聚,就是类的内部数据操作细节由自己完成,不允许外部干涉;低耦合:仅暴露方法给外部使用。

这样说来,属性都要隐藏,也就是要用private来修饰。那么,继承的时候,这些属性都无法继承了。
所以,封装的理念,和继承的理念,是有矛盾的。

这么说对吗?显然是不对的,那么哪里不对呢?关于继承的说法不对。
继承,不管好的坏的,公开的隐藏的,都会全盘继承下来,只是说,有些属性在父类定义为private后,
即使是子类,也无法看到和直接访问。并不是说子类没有继承下来,而是说不能直接查看和使用而已。
而是要通过封装后暴露的方法来访问。所以,封装、和继承是可以配合,是不完全矛盾的。
继承的重点,在于减少冗余的属性和方法的定义。而在继承的基础之上,会衍生出一个大的概念系统:抽象、重写、运行时多态等等。

比如,当定义了一个Animal类时:

package com.exam;

public class Animal
{
    private String name;

    Animal(){
        name="Animal";
    }

    public String getName(){
        return name;
    }

    public void say(){
        System.out.println("Animal# my name is "+name);
    }

}

而一个继承类,虽然继承了Animal类,但是想直接访问它的private修饰的属性,那是不行的,编译时就会报错。

而在继承的基础上,又会出现方法重写。出现抽象类。

另外,为了解决加java里面只有单继承的问题,又出现了接口。

从继承这个基本的概念,延伸出了非常多的扩展的概念,而这些扩展的概念都是有非常重要的实战意义。

有人说java是一门非常成熟的工程语言。我非常赞成。

这一套的概念学习下来,你会觉得它是完整的,闭环的,有体系的,能够经得起时间考验的,也就是说,能够长期的存活下来的。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。