美文网首页
为什么字段不能被覆盖?

为什么字段不能被覆盖?

作者: 草木不语只深深绿 | 来源:发表于2018-03-28 10:38 被阅读0次

本文展示了Java中的基本面向对象概念 - 字段隐藏。

1.可以在Java中重写字段吗?

我们先来看看下面的例子,它创建了两个Sub对象。 一个分配给一个Sub引用,另一个分配给一个Super引用。

package oo;
 
class Super {
    String s = "Super";
}
 
class Sub extends Super {
    String s = "Sub";
}
 
public class FieldOverriding {
    public static void main(String[] args) {
        Sub c1 = new Sub();
        System.out.println(c1.s);
 
        Super c2 = new Sub();
        System.out.println(c2.s);
    }
}

输出:

Sub
Super

我们确实创建了两个Sub对象,但为什么第二个打印出“Super”?

2.隐藏字段而不是重写字段

隐藏字段有明确的定义:

在类中,与父类中的字段具有相同名称的字段会隐藏父类的字段,即使它们的类型不同。 在子类中,父类中的字段不能被其简单名称引用。 相反,该字段必须通过父类访问。 一般来说,我们不建议隐藏字段,因为它会使代码难以阅读。

根据此定义,成员字段不能像方法一样被覆盖。 当子类定义一个同名的字段时,子类只是声明了一个新字段。 父类中的字段是被隐藏了。 它没有被覆盖,所以它不能被多态地访问。

3.访问隐藏字段的方法

1)通过使用父引用类型,隐藏的父类字段可以被访问,就像上面的例子。
2)通过转换,您可以访问父类中的隐藏成员。

System.out.println(((Super)c1).s);

相关文章

  • 为什么字段不能被覆盖?

    本文展示了Java中的基本面向对象概念 - 字段隐藏。 1.可以在Java中重写字段吗? 我们先来看看下面的例子,...

  • java面试final关键字

    准备知识点: final可以修饰字段、方法、类。 当修饰字段的时候该字段值不能被改变 当修饰方法的时候该方法不能被...

  • 2018-08-31

    1接口测试:1.功能测试:正常流(全字段覆盖,必填字段覆盖)异常流(单字段‘位长,类型,必填和非必填)2.流程测试...

  • MySQL覆盖索引

    MySQL覆盖索引 1.定义: 一个索引包含(或者覆盖)所有需要查询的字段

  • WKWebView获取UA以及更改UA的坑

    最近有webView的相关需求,需要更改UA来适应我们的前端,但是又得保留原本的UA,所以不能直接覆盖,得追加字段...

  • JAVA之域隐藏、静态方法隐藏以及动态、静态绑定

    1、域隐藏 当子类继续父类时,出现相同字段时父类字段不会将子类字段覆盖,而只是将其“隐藏”。 例子: 父类: pu...

  • MySql性能(9)- mysql的order by的工作原理

    全字段排序 rowid排序 全字段排序和rowid排序3.1 联合索引优化3.2 覆盖索引优化 优先队列算法 优化...

  • ClassReader 解析

    1. ClassReader的字段    包含了要解析的Class字节数组,该数组内容不能被修改。此字段适用于At...

  • mysql 单表查询优化

    1、首先是去掉select *,需要那几个字段,就使用那几个字段 2、使用覆盖索,就是查询使用的字段包含在索引中 ...

  • 什么是覆盖索引和回表吗?

    覆盖索引指的是在⼀次查询中,如果⼀个索引包含或者说覆盖所有需要查询的字段的值,我们就称之为覆盖索引,⽽不再需要回表...

网友评论

      本文标题:为什么字段不能被覆盖?

      本文链接:https://www.haomeiwen.com/subject/telycftx.html