java面向对象编程中可能出现的隐藏hide、遮蔽shadow、遮掩obscure

2023-05-16

    在java面向对象编程中,我们最常遇到的两个场景是覆盖和重载。这两种情形是因为方法名相同的不同展现形式。

    方法覆盖是表现在父类和子类之间。

    方法重载发生在一个类的内部。

    在面向对象编程中,我们还可能出现下面几种场景:

    隐藏:在父类中定义了静态方法,在子类中,定义了同名的静态方法。

package com.xxx.oop;
public class HideExample {

    public static void main(String[] args) {
        Dog dog = new Dog();
        Dog basenji = new Basenji();
        //Basenji basenji = new Basenji();
        dog.bark();
        basenji.bark();
        System.out.println(dog.name);
        System.out.println(basenji.name);
    }

}
class Dog{
    protected String name = "dog";

    public static void bark(){
        System.out.println("woof");
    }
}

class Basenji extends Dog{
    protected String name = "basenji";
    public static void bark(){
        System.out.println("miao");
    }
}

    程序运行的结果:

woof
woof
dog
dog

    我们修改Dog basenji = new Basenji() 为 Basenji basenji = new Basenji();

    这个时候,才可能打印我们期望的结果:

woof
miao
dog
basenji

    遮蔽:在类内部,我们定义了一个全局变量,在方法体内,我们又定义了一个同名的变量。

package com.xxx.oop;
public class ShadowExample {
    static final String sentence = "i don't know.";

    public static void main(String[] args) {
        String sentence = "i know.";
        System.out.println(sentence);
    }

}

    这种情况,在其他语言里面也类似,最终程序运行,读取变量采取就近原则。在java里面这种情形就是遮蔽shadow。 

    遮掩:在类内部,我们定义了一个变量,但是这个变量是已经有命名空间的关键字名字。

package com.xxx.oop;
public class ObscureExample {
    static final String System = "hello.";
    public static void main(String[] args) {
        System.out.println("hello,obscure.");
    }
}

    这种情况在编译阶段就会报错,这里本来想读取java.lang命名空间下的System类,但是因为我们定义了局部变量System,java.lang.System就不能通过简单的包名访问了。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java面向对象编程中可能出现的隐藏hide、遮蔽shadow、遮掩obscure 的相关文章

随机推荐

  • ubuntu源码编译busybox与linux内核并使用qemu-system-x86_64模拟启动

    busybox 1 35 0 https busybox net downloads busybox 1 35 0 tar bz2 sudo apt install make gcc libncurses dev 编译配置 xff1a 在b
  • Postgre数据库用户权限总结

    1 故事起源 我们的项目使用了PG数据库 xff0c 在项目开发阶段 xff0c 为了省事偷懒 xff0c 直接将应用连接数据库的用户给了supperuser权限 xff0c 用起来简直不要太爽 随着开发进度接近中后期 xff0c 开始筹建
  • mvn install:install-file将本地jar安装到maven本地仓库

    有一些三方jar包是远程仓库中没有的 xff0c 我们在maven项目中 xff0c 可以通过指定本地jar的方式使用它 lt dependency gt lt groupId gt org lt groupId gt lt artifac
  • linux奇技淫巧

    杀死进程 杀死进程 xff0c 一般的做法 xff0c 我们先通过ps ef 结合grep 定位进程号 然后执行kill 9 PID 有人将这个操作简化 xff0c 通过一行命令就解决 1 找进程号 ps ef grep python3 g
  • [牛客网]OR63删除公共字符

    如题所示 xff0c 该算法描述如下 xff1a 描述 输入两个字符串 xff0c 从第一字符串中删除第二个字符串中所有的字符 例如 xff0c 输入 They are students 和 aeiou xff0c 则删除之后的第一个字符串
  • svg通过虚线画形状

    svg可以做很多事情 xff0c 如今和canvas在web开发中使用越来越多 默认svg画图 xff0c 如果是空白填充 xff0c 最后展示的形状线条是实线 今天介绍一个属性 xff0c 可以上画出的图形显示虚线 这个属性就是strok
  • 通过vue ui方式构建vue+electron项目

    以前我构建vue 43 electron项目都是使用一些模版比如webpack simulatedgreg electron vue等 xff0c 这些模版在github上 xff0c 有时候可能因为网络原因下载会慢一些 后来看到一些文章介
  • vue+echarts画甘特图

    vue项目中添加echarts xff0c 只需要增加echarts依赖 xff0c 然后在main js中引入echarts就可以使用了 1 npm install echarts save 2 修改main js import as e
  • mac系统下node版本管理工具n的安装与使用

    node版本管理 xff0c 在windows和linux下都叫nvm 在mac下 xff0c 更加简洁 xff0c 直接就是n xff0c 似乎容易让人产生怀疑 xff0c 这太简洁了 xff0c n可以表示很多意思啊 这就是mac系统独
  • python输出不换行与多行注释

    默认情况下 xff0c python输出打印方法print xff0c 每一次调用都会单独输出一行内容 xff0c 有些场景下面 xff0c 我们需要输出是连在一起的 xff0c 不用单行显示 这就需要对打印做设置 xff0c 参数是end
  • vue转electron项目以及使用fs报错:Module not found: Error: Can‘t resolve ‘fs‘ in解决办法

    前面写了一篇博客 xff0c 通过vue ui创建electron 43 vue项目 xff0c 其实关键的一步就是增加vue cli plugin electron builder插件依赖 这一步可以通过界面上添加 xff0c 也可以手动
  • python将图片转矩阵

    在机器学习手写数字识别案例中 xff0c 需要将手写数字图片转矩阵向量 其实转矩阵 xff0c 就需要根据图片上像素点来组成一个矩阵 xff0c 如果把图片看作一个 长 宽 的二维矩阵 xff0c 那么矩阵中的每个点的像素表示的数字组成一个
  • ant-design-vue中this.$confirm 确认框使用

    cancelService obj let self 61 this this confirm title 39 确认提示 39 content 96 是否确认取消服务 xff1f 96 okType 39 danger 39 onOk r
  • javascript数组排序

    javascript原生排序算法sort xff0c 如果不带排序函数 xff0c 那么就是默认按照升序排列 如果是数字类型就按照从小到大的顺序排列 xff0c 如果是字符串 xff0c 就按照字母顺序排列 Sorts an array i
  • electron项目打包之后显示空白页面以及发送http请求地址错误

    electron项目在开发阶段 xff0c 因为使用webpack脚手架 启用了webServer提供的http服务 xff0c 所以有路由功能 xff0c 当我们运行npm run electron serve的时候 xff0c 最后可以
  • mac系统electron项目打包出现:Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT

    mac系统下 xff0c electron项目打包 xff0c 好像需要python可执行程序 xff0c 如果找不到就报这个错误 xff0c 而且python版本需要2 7版本 我的系统不知道怎么回事 xff0c 因为已经安装了pytho
  • 矩阵的乘法与利用矩阵求解线性方程组

    矩阵的乘法定义 xff1a 假定A 61 是一个m s的矩阵 xff0c B 61 是一个s n的矩阵 xff0c 那么规定 xff0c 矩阵A与矩阵B的乘积是一个m n的矩阵C 61 xff0c 其中 xff0c i 61 1 2 m j
  • 正则表达式[^]的作用

    与数字组合然后用中括号扩起来的用法比如 0 9 xff0c 或者与字母组合 a z 我们经常能见到 xff0c 表示匹配除了0 9或者a z之外的其他字符 但是有一种形式 xff0c 就是中括号 里面单独一个 xff1a 这种情况 xff0
  • [Java] synchronized在代码块中修饰.class与this的区别

    synchronized是java中的关键字 xff0c 表示同步 xff0c 可以在多线程环境中起到锁的作用 它是jvm层面的锁 xff0c 不需要人为获取释放锁资源 xff0c 由jvm决定 synchronized可以直接用在方法上
  • java面向对象编程中可能出现的隐藏hide、遮蔽shadow、遮掩obscure

    在java面向对象编程中 xff0c 我们最常遇到的两个场景是覆盖和重载 这两种情形是因为方法名相同的不同展现形式 方法覆盖是表现在父类和子类之间 方法重载发生在一个类的内部 在面向对象编程中 xff0c 我们还可能出现下面几种场景 xff