`

通过一个例子看Java中覆盖和隐藏的区别

 
阅读更多

           Java中有一条规则,子类复写父类的方法时,子类的这个方法的访问权限应该宽于或等于父类的那个方法的权限。举个例子,就是说如果父类中有一个方法是protected void getName(){}。则子类在复写该方法的时候,权限只能是public或者protected。不能是private。

            所以看看下面这个程序,预测一下输出结果:

 

class Father{
	public String className="Father";
	public void className(){
		System.out.println("FATHER");
	}
}

public class Son extends Father{
	private String className="Son";
	public void className(){
		System.out.println("SON");
	}
	public static void main(String args[]){
		System.out.println(new Son().className);
		System.out.println(((Father)new Son()).className);
		
		new Son().className();
		((Father)new Son()).className();
	}
}

 

 

    对于方法className(),子类Son复写了父类Father的这个className()。要知道复写之后就消失了,通过将子类对象强制转换成父类的方式是不可能访问到父类中那个被复写的方法了。所以,

                new Son().className();
		((Father)new Son()).className(); //这样已经访问不到Father的className了

 但是对于域而言,是不存在复写的。Son中的className域是private的,而Father中的className域是public的。这样是合法的。这一点和方法的那个权限放宽规则是不同的。但是,Son中的className的域并没有覆盖Father中的className域,而是隐藏了他。所以使用将子类对象强制转换成父类的方式还是可以访问到的

 

综上分析输出结果为:

Son
Father
SON
SON

 

分享到:
评论

相关推荐

    Java 中方法的重载与覆盖

    例如,如果父类有一个方法`public void getNum()`,则子类中的覆盖方法也必须是`public void getNum()`。 2. **返回类型必须相同**:覆盖方法的返回类型必须与被覆盖的方法相同。 3. **抛出的异常必须相同或更少**...

    Java方法的覆盖与隐藏的区别分析

    Java中的方法覆盖(Override)和隐藏(Hiding)是面向对象编程中的两个重要概念,它们涉及到多态性和运行时类型识别(RTTI)。在Java中,这两种情况在处理继承关系时会产生不同的行为。 1. **方法覆盖(Override)*...

    java大部分简单技术的简单例子

    "java大部分简单技术的简单例子"这个标题暗示了我们将探讨Java中的基础概念和技术,通过简单的实例来帮助理解。以下是Java中的一些核心知识点: 1. **基本语法**:Java程序由类(class)组成,每个类包含方法...

    Java方法继承、方法重载、方法覆盖总结

    7. **覆盖与隐藏的区别**: 当子类中定义了一个与父类同名但参数列表不同的方法时,这实际上是一种“隐藏”,而非覆盖。 #### 四、super关键字 **super关键字**在Java中用于指代当前对象的直接父类对象。它主要用于...

    《Java面向对象程序设计》例子源代码

    这些知识点在《Java面向对象程序设计》的例子源代码中会得到充分展示,读者可以通过实际运行代码来加深理解,学习如何在实际项目中应用这些概念。通过阅读和分析这些例子,你将能够更好地掌握Java的面向对象特性,...

    Java开发示例代码

    2. **公共类与源文件**:一个`.java`源文件中只能包含一个公共类(public class),但是可以有多个非公共类。 3. **抽象类与抽象方法**:含有`abstract`关键字的类是抽象类,它可能没有完全定义的方法,这些方法...

    java方法的覆盖java方法的覆盖.doc

    Java中的方法覆盖是面向对象编程的一个重要特性,它允许子类根据自己的需求重写或扩展父类中的某个方法。在Java中,当子类继承父类,并且子类定义了一个与父类同名、同参数列表的方法时,就发生了方法覆盖。这使得...

    Java源码小合集:继承和多态相关的例子.rar

    继承和多态的相关Java源码下载,比较散,像覆盖和重载、对象类Object和它的toString()方法、多态性、动态绑定和一般程序设计、数组线性表ArrayList类、final类、方法和变量、数据域和静态方法的隐藏、调用父类的方法...

    浅谈java面向对象和引用

    - **类与对象**:在Java中创建一个类之后,可以通过该类创建多个对象。例如,我们定义了一个`Person`类,那么就可以创建多个`Person`对象,每个对象都有自己独立的状态(如姓名、年龄等属性)和行为(如吃饭、睡觉等...

    Java面向对象程序设计课本例题源代码

    3. **继承**:继承允许一个类(子类)继承另一个类(父类)的属性和方法。在源代码中,你会找到使用`extends`关键字创建子类的例子,这有助于代码重用和多态性的实现。 4. **多态**:多态是对象可以表现出多种形式...

    java知识点汇总

    反射机制(Reflection)是Java语言中一个强大的特性,它允许程序在运行时动态地访问类的属性和方法。反射主要用于实现某些框架的底层功能,如Spring的依赖注入等。 在Java EE设计模式部分,文中提到了代理模式...

    21天学java 例子

    在“21天学Java”这个系列教程中,我们旨在为有一定编程基础的学习者提供一个系统而深入的Java学习路径。在21天的时间里,每天都会覆盖不同的主题,旨在逐步增强你的Java编程技能。让我们详细探讨一下这个过程中的...

    java笔记例子

    继承允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码复用。多态则是指同一种行为在不同对象上有不同的表现形式,这在接口和抽象类中尤为常见。 在Java中,类和对象是核心元素。类是对象的蓝图,...

    JAVA编程百例

    在Java中,一切皆为对象,类是创建对象的模板,封装是隐藏对象内部细节的过程,继承允许子类从父类继承属性和方法,而多态则提供了多种形态的能力,使程序更具灵活性。通过实践这些基础概念,开发者可以构建出高效且...

    JAVA 简单实例

    继承允许一个类(子类)从另一个类(父类)继承属性和方法,提高了代码的复用性。Java 使用关键字 `extends` 来实现继承,子类可以扩展父类的功能或覆盖父类的方法。 4. **多态**: 多态是指同一种行为可以有多种...

    Thinking in Java 中文第四版+习题答案

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 总结...

    神经网络算法与实现(基于java)示例代码

    在Java中,你可以创建一个类来表示神经元,包含权重、偏置以及激活函数等属性和方法。 2. **层的概念**:神经网络由多个层组成,包括输入层、隐藏层和输出层。每个层由若干个神经元构成,层与层之间通过权重连接。...

    java第四章ppt

    在Java中,事件处理就是一个典型的例子,如GUI组件之间的事件触发和响应。 4.1.4 类 类是对象的蓝图,它定义了同类对象共享的属性和行为。通过类,我们可以创建具有相同特征但状态不同的对象实例。例如,自行车类...

Global site tag (gtag.js) - Google Analytics