Java子类与父类方法的隐藏和覆盖

class Base{

????int
x = 1;

????static
int
y = 2;

????String name(){

????????return
"mother";

????}

????static String staticname(){

????????return
"static mother";

????}

}

class Subclass extends Base{

????int
x = 4;

????int
y = 5;

????String name(){

????????return
"baby";

????}

????static String staticname(){

????????return
"static baby";

????}

}

public
class Test02{

????public
static
void main(String[] args){

????????Subclass s = new Subclass();

????????System.out.println(s.x+" "+s.y+" "+s.name()+" "+s.staticname());

????????Base s1 = s;

????????System.out.println(s1.x+" "+s1.y+" "+s1.name()+" "+s1.staticname());

????}

}

?

/*

结果:

?

4 5 baby static baby

1 2 baby static mother

结论:

?

父类的实例方法被子类的同名实例方法覆盖

父类的静态方法被子类的同名静态方法隐藏

父类的实例变量和类变量可以被子类的实例变量和类变量隐藏

?

就"Base s1 = s"来说:把s赋值给s1时,s(子类)的方法name已经把父类的name方法覆盖了,却没有覆盖static name,而是隐藏了它。

赋值给s1后,s1的name方法已经变成了"baby",而staticname方法只是被隐藏而没有被覆盖,现在有还原成了"static mother"

*/

时间: 2024-07-30 23:27:27

Java子类与父类方法的隐藏和覆盖的相关文章

JAVA的重载与重写&隐藏与覆盖

重载: 前提条件:重载是针对方法来说的, ①在同一个类当中, ②函数名字相同, ③但是参数个数不同或参数类型不同或参数顺序不同 ④只有返回值不同是不可以的 重写: 前提条件:重写是针对实例方法来说的 1.要求子父类有相同的"返回值类型 方法名(参数列表)"都相同2.子类方法的权限修饰符不能小于父类方法的权限修饰符3.若父类方法抛异常,那么子类方法抛的异常不能大于父类方法抛的异常4.子父类的方法必须同为static或者同为非static 方法不能交叉覆盖:子类实例方法不能覆盖父类的静态方

Java:类与继承(隐藏和覆盖的问题)

盒子先生金金 Java:类与继承(隐藏和覆盖的问题) Java:类与继承 Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知识.首先,我们讲述一下与类的初始化相关的东西,然后再从几个方面阐述继承这一大特性.以下是本文的目录大纲: 一.你了解类吗? 二.你了解继承吗? 三.常见的面试笔试题 若有不正之处,请多多谅解并欢迎批评指正. 请尊重作者劳动成果

隐藏和覆盖的区别和用法

讲隐藏和覆盖之前先看两个概念:静态类型和动态类型. 任何一个引用变量都有两个类型:一个叫静态类型,也就是定义该引用变量的类型:另一个叫动态类型,也就是该引用实际指向的对象类型. 比如对于两个类A和类B,有:A a=new B(): 那么,引用a的静态类型就是A,动态类型就是B. java中引用的静态类型在编译的时候就可以确认,但是编译器无法得知这个引用的动态类型:只有当程序运行时,通过RTTI就可以检查出引用的动态类型. 再介绍一下,java中绑定的概念:对于一个程序,可以有很多的方法.这些方法

c++ 函数的隐藏和覆盖

转自:http://bbs.csdn.net/topics/390082114 在看<高质量c/c++>中看到了函数的隐藏和覆盖是这么说的: 覆盖的是指子类函数覆盖基类函数在不同的类内(分别位于子类和父类).同名同参.基类的函数名前必须有virtual关键字.隐藏指派生类的函数隐藏了基类的同名函数如果派生类函数与基类函数同名,但参数不同,无论基类函数前是否有virtual修饰,基类函数被隐.如果派生类函数与基类函数同名,参数也相同,但是基类函数前无virtual修饰,基类函数被隐藏. 1 cl

C++父子类继承时的隐藏、覆盖、重载

存在父子类继承关系时,若有同名成员函数同时存在,会发生隐藏.覆盖和重载这几种情况.对于初学者也比较容易混淆,为此,我整理了一下我的个人看法,仅供参考.希望对大家理解有帮助,也欢迎指正. 1.父子类继承关系: 子类复制父类全部成员 首先,理解父子类的继承关系是怎样发生的.在此基础上就很容易理解它们之间的关系和区别. 每一个类有它自己的成员变量和成员函数,是一个独立的空间整体.当子类继承父类时,会将父类的全部成员全部复制一份,作为子类的成员,但是,同时也会标记这些成员是从父类中继承的,与子类本身的成

重载、隐藏、覆盖的区别

成员函数的重载.隐藏.覆盖有时候难以辨别,如果你还不太理解,请往下看. 首先,我们先了解一下成员函数被重载,覆盖,隐藏的特征. 成员函数被重载的特征: (1)在同一个类中 (2)函数名相同,参数不同(参数的个数,参数的类型) (3)无返回值 成员函数被覆盖的特征: (1)不在同一个类中 (2)函数名相同,参数相同 (3)基类函数必须有vritual关键字 成员函数被隐藏的特征: (1)不在同一类中 (2)函数名相同,若参数不同,无论有无vritual关键字,基类函数都被隐藏. 若参数相同,基类函

Java 子类有参构造器报错

Java 子类的有参构造器报错:Implicit super constructor Person() is undefined. Must explicitly invoke another constructor import java.util.*; class Person { protected String firstName; protected String lastName; protected int idNumber; // Constructor Person(Strin

Java基础 成员变量的继承与覆盖

通过继承可以得到父类的成员变量,子类的成员变量包括从父类继承的成员变量(包括从祖先类中继承的成员变量)以及子类中重新定义的成员变量.本次介绍内容包括:可以继承哪些成员?如果子类和父类出现了相同的成员变量如何处理? 1.可以继承的成员变量 可以继承的成员变量与成员变量的访问控制类型有关,成员变量的访问控制类型包括public.protected.缺省的和private. 子类继承父类之后,可以继承父类的public和protected类型的成员变量.例如: public class Parent{

类中函数的重载、隐藏和覆盖

函数重载只会发生在同一个类中,函数名相同,只能通过参数类型,参数个数或者有无const来区分.不能通过返回值类型区分,而且virtual也是可有可无的,即虚函数和普通函数在同一类中也可以构成函数重载. 基类和派生类中只能是隐藏或者覆盖.1)隐藏是指派生类中有函数与基类中函数同名,但是没有构成虚函数覆盖,就是隐藏. 隐藏的表现:若基类中函数func()被派生类中函数func()隐藏,那么无法通过派生类对象访问基类中的func() 函数,派生类对象只能访问到派生类中的func()函数.不过基类中的f