public class Parent2
{
//类变量,Parent2的类别
public static String kind = "com.baodian.unit2.Parent2";
//类变量,Parent2的年龄
public static int age = 50;
//实例变量,Parent2的名字
public String name = "Parent2";
/**
* 静态方法,获取parent2的类别
* @return
*/
public static String getKind()
{
System.out.println("Parent2的getKind()方法被调用了");
return kind;
}
/**
* 静态方法,获取Parent2的年龄
* @return
*/
public static int getAge()
{
System.out.println("Parent2的getAge()方法被调用");
return age;
}
/**
* 实例方法,获取Parent2的名字
* @return
*/
public String getName()
{
//实例方法中操作的可以是实例变量,也可以是类变量
System.out.println("Parent2的getName()方法被调用了!");
return null;
}
/**
* final方法,将Parent年龄加1
* @return
*/
public final int nextAge()
{
return ++age;
}
}
public class Child2 extends Parent2
{
//类变量,Child2的类别
public static String kind="com.baodian.unit2.Child2";
//实例变量,Child2的年龄,在Parent2类中是static的
public int age = 25;
//实例变量,Child2的名字
public String name="Child2";
/**
* 静态方法,获取Child2的类别
* @return
*/
public static String getKind()
{
System.out.println("Child2的getKind()方法被调用了");
return kind;
}
/**
* 静态方法,获取父类的名字
* @return
*/
public static String getParentKind()
{
//通过类名加"."访问父类中被隐藏的类变量
return Parent2.kind;
}
/**
* 实例方法,获取Child2的名字
*/
public String getName()
{
System.out.println("Child2的getName()方法被调用了");
return this.name;
}
/**
* 实例方法,获取父类的名字
* @return
*/
public String getParentName()
{
//通过super关键字父类中被隐藏的实例变量
return super.name;
}
/*
* 错误!!!,实例方法不能覆盖父类的静态方法
public int getAge()
{
return this.age;
}
*/
/*
* 错误!!!父类的final方法不能够被覆盖
public int nextAge()
{
return ++age;
}
*/
}
/**
*
* 方法和变量在继承时的覆盖与隐藏
*/
public class CoverHideTest {
public static void main(String args[])
{
//先测试继承时变量的覆盖与隐藏问题
Child2 child = new Child2();
System.out.println("child name:" + child.name + "; age:" + child.age +
"; kind:" + child.kind);
//此处得到的都是Child2类的变量值
//将child类型转换成Parent对象
Parent2 parent = child;
System.out.println("转换成Parent2后name:" + parent.name + "; age:" +
parent.age + "; kind:" + parent.kind);
//此处得到的都是Parent2类的变量值
System.out.println();
System.out.println("子类访问父类被隐藏的实例变量name: " + child.getParentName());
System.out.println("子类访问父类被隐藏的静态变量kind: " + child.getParentKind());
//再测试继承时方法的覆盖与隐藏问题
System.out.println();
child.getName(); //实例方法
child.getKind(); //静态方法
parent.getName(); //实例方法
parent.getKind(); //静态方法
}
}
分享到:
相关推荐
然而,在继承过程中,可能会出现方法和变量的覆盖(Override)和隐藏(Hide)问题。这个问题对于理解Java类的继承机制和代码的运行行为非常重要。 首先,需要明确几个概念:覆盖与隐藏。方法覆盖发生时,子类提供一...
变量和方法覆盖和隐藏的不同:一个类的实例无法通过使用全局名或者强制自己转换为父类型,以访问父类中被隐藏的方法,然而强制转换子类为父类型之后,可以访问父类中被隐藏的变量。另外静态方法不能覆盖父类的实例...
7. **覆盖与隐藏的区别**: 当子类中定义了一个与父类同名但参数列表不同的方法时,这实际上是一种“隐藏”,而非覆盖。 #### 四、super关键字 **super关键字**在Java中用于指代当前对象的直接父类对象。它主要用于...
在Java中,当子类中定义了一个与父类方法完全匹配的方法时,子类的方法就会覆盖父类的方法。例如,在给定的示例中: ```java public class People { public String getName() { return "people"; } } public ...
继承的本质和原理是面向对象编程中的核心概念,它允许建立一个类(称为派生类或子类)来继承另一个类(称为基类或父类)的属性和方法。继承促进了代码复用,并有助于实现分类和层次结构。继承还允许派生类扩展基类的...
- 当子类继承父类并重写了一个非静态(非final)方法时,我们称作方法覆盖。覆盖的条件是子类的方法签名必须与父类被覆盖的方法完全相同,包括方法名、参数列表和返回类型。 - 在上面的代码示例中,`Cat`和`Dog`类...
继承是指一个类继承另一个类的成员变量和方法,使得子类可以获得父类的所有成员变量和方法,并在此基础上增加自己的成员变量和方法。继承的关键字是 extends,它表示子类继承自父类。 继承的实现 Java 中的继承是...
成员的隐藏与覆盖 - **成员变量的隐藏**:子类中定义的与父类同名的成员变量会隐藏父类中的同名成员变量。这意味着在子类内部,使用变量名时会优先引用子类的成员变量。 - **方法的覆盖**:子类中定义的与父类同名...
本资源摘要信息将对Java继承与接口进行详细的讲解,包括继承原理与机制、类继承的声明方法、成员变量的隐藏及方法的重写、抽象类与抽象方法、super和final关键字、多态的内涵及实现代码、接口的声明和使用等。...
1. 练习目标:掌握类继承的基本操作,包括创建子类、继承成员、隐藏和覆盖方法等。 2. 时间安排:建议分配180分钟进行练习,翻译部分写在JAVA笔记本上,书面作业写在JAVA家庭作业本上。 3. 错误预防:在编写代码时,...
当我们在子类实例调用这个方法时,实际上调用的是基类的方法。 二、子类覆盖基类方法 在C#中,子类可以覆盖基类的方法,这是最常见的情况。例如: ```csharp class Person{ public virtual void Greeting() { ...
`this`和`super`常常用于解决成员变量的隐藏和方法的覆盖问题,尤其是在构造方法中调用其他构造方法或父类的构造方法时。 总的来说,继承和接口是Java中实现代码复用、模块化和扩展性的核心工具。通过合理利用这些...
1继承的概念 2继承的实现 3变量隐藏与方法覆盖 4super关键字 5 子类的构造顺序 6Object类 7 final关键字
- 在方法中,`super.成员名`用来访问父类的隐藏成员或被覆盖的方法。 6. **泛型**: - 泛型是Java 5引入的新特性,它允许在类、接口和方法中使用类型参数,增强了代码的类型安全性和重用性。 - 泛型可以避免类型...
成员变量的隐藏发生在子类中声明了与父类同名的变量时,子类会优先使用自己定义的变量,而隐藏父类的变量。方法重写(Override)则发生在子类提供与父类相同名称和签名的方法,以便为特定的子类行为提供不同的实现。...
虽然没有给出具体的错误代码,但常见的错误可能包括:构造器不匹配、访问权限冲突、未初始化的变量、重写方法时签名不一致等。修复这些错误通常涉及调整访问修饰符、添加构造器参数、正确调用`super`或确保方法签名...
在Java中,多态可以通过继承和方法覆盖来实现。 **特点:** - **方法覆盖实现多态:** 子类可以覆盖父类的方法,根据运行时的对象类型动态决定调用哪个方法。 - **接口实现多态:** 实现接口的多个类可以拥有相同的...
隐藏发生在父类和子类之间,当子类中存在与父类同名的成员变量或静态方法时,父类的成员变量或静态方法在子类中被隐藏,但并未真正消失。父类和子类的实例变量/静态变量可以交叉隐藏,也就是说,如果子类有一个与...
**隐藏**发生在继承关系中,当子类定义了一个与基类同名的成员(函数或变量)时,基类的同名成员在子类的作用域内被“隐藏”。这意味着在子类中直接调用这个名字时,将调用子类的成员,而不是基类的成员。例如: ``...