/**
* 父类
* @author rongxinhua
*
*/
public class Father{
private String name="FATHER";
public Father(){
whoAmI();
tellName(name);
}
public void whoAmI(){
System.out.println("Father says, I am " + name);
}
public void tellName(String name){
System.out.println("Father's name is " + name);
}
}
/**
* 子类
* @author rongxinhua
*
*/
public class Son extends Father{
private String name="SON";
public Son(){
whoAmI();
tellName(name);
}
public void whoAmI(){
System.out.println("Son says, I am " + name);
}
public void tellName(String name){
System.out.println("Son's name is " + name);
}
}
public class Client {
public static void main(String args[]) {
Father who = new Son();
}
}
Son says, I am null
Son's name is FATHER
Son says, I am SON
Son's name is SON
后面两项输出应该都能理解,主要是前面两项,分享一下我的理解:
new Son() 时,首先初始调用父类的<init>方法(这是必然的,既使没有继承任何类的类也会调用 Object 的<init>方法),这样就执行到 Father 类的 <init> 方法,首先是成员变量的初始化,private String name="FATHER",然后执行 whoAmI(),因为 Son overwrite 了这个方法,所以实际执行 Son 的 whoAmI() 方法,Son 的 whoAmI() 方法中使用了 name 变量,这里用的实际是 Son 的 name 变量,这个时候还没有初始化,所以是 null ,这就是第一行输出;然后是 tellName(name),当然也是执行的 Son 的 tellName(name) 方法,不同的是传了参数 name 进来,这个 name 是 Father 里的 name ,值是 "FATHER",于是就是第二行输出。
分享到:
相关推荐
在这个"**C++实验程序继承输入输出**"的主题中,我们将探讨如何在C++中实现继承,并处理输入和输出。 首先,让我们理解继承的基本概念。继承允许子类继承基类的属性和方法,无需重新定义。这样可以提高代码的复用性...
运行这个程序,输出结果将是`James的年龄是28`,这表明子类对象`c`的实例变量已经被正确地初始化,并且父类的实例变量也被初始化了。 总的来说,这个程序展示了Java中类的继承机制,如何通过构造方法传递参数来初始...
【Java面向对象之继承练习题】的解析与详解: 1. **类的继承**:在Java中,继承是面向对象编程的重要特性,允许一个类(子类)继承另一个类(父类)的属性和方法。例如,我们可以创建一个`Music`类作为其他音乐相关...
9. **多重继承输出**:程序会输出13,因为类B的对象首先调用了A1的构造函数,然后调用了A2的构造函数,最后A的a初始值为10,经过两次加法操作后为13。答案是B。 10. **虚函数关键字**:用于声明虚函数的关键字是`...
这个课件主要涵盖了C++的几个核心概念和技术,包括类和对象、数值输入输出、运算符重载、继承与派生以及指针和数组。下面将详细阐述这些知识点。 1. **类和对象**:在C++中,类是数据和操作数据的方法的集合,是...
在Java编程语言中,继承是面向对象特性之一,它允许我们创建一个类(子类或派生类)作为现有类(父类或基类)的扩展。这种设计模式有助于代码重用,使得子类可以继承父类的属性和方法,并且可以添加新的功能或覆盖已...
在Java编程语言中,继承和多态是面向对象编程的核心概念。这个代码实例主要展示了如何利用这些特性来处理员工信息的输出。以下是关于这个主题的详细解释。 **继承(Inheritance)** 继承允许一个类(子类)继承另一...
### JS继承的实现方式 JavaScript作为一种灵活且功能强大的编程语言,支持多种继承模式。下面将详细介绍几种常见的继承实现方式,并探讨它们的特点与应用场景。 #### 一、原型链继承 **核心思想**: 将父类的实例...
JavaScript是一种基于原型(Prototype)的面向对象编程语言,它的继承机制不同于传统的类继承,而是采用原型链(Prototype Chain)的方式实现。在这个模式下,对象可以继承其他对象的属性和方法,形成一种“类”的...
在C++编程语言中,类的继承与派生是面向对象编程的重要概念,它们允许创建新的类(派生类)基于已存在的类(基类),从而实现代码复用和类的扩展。本实验旨在帮助学生深入理解这些概念,并解决相关的编程问题。 1. ...
// 输出 "John Smith" ``` 4.2.1 原型链 创建继承`Person`的`Author`类,需要建立原型链。这通常涉及以下步骤: 1. 在`Author`构造函数中,使用`call`或`apply`调用父类的构造函数,将`name`参数传递给它。 2. 将`...
5. **寄生组合式继承**:结合了寄生式继承和组合继承的优点,是JavaScript中推荐的继承方式,可以在`Javascript面向对象编程(三):非构造函数的继承.docx`中找到更详细的解释。 例如,使用寄生组合式继承: ```...
在主函数中,我们实例化了一个 `CGradonWork` 对象,并通过调用 `Print()` 函数来输出对象的信息。这个过程演示了如何通过派生类的对象直接访问基类的成员,以及如何在派生类的构造函数中调用基类的构造函数。 关于...
在主函数中,通过实例化长方体对象并输出体积,展示了继承的概念。 2. 其次,设计了一个基类`Person`,派生出`Student`和`Teacher`类。`Student`类添加了学号,`Teacher`类增加了职称。接着,创建了一个`Graduate`...
而`helloworld.exe`是编译后的可执行程序,可以直接运行查看多继承的输出效果。通过分析源代码,我们可以更深入地理解多继承的实现细节和应用场景。 总之,C++的多继承机制提供了灵活的代码重用,但也需要开发者...
通过这样的继承关系,IO标准库能够提供高度灵活且强大的输入输出处理能力,满足开发者在不同场景下的需求。例如,`std::fstream`不仅继承了`std::istream`和`std::ostream`的所有功能,还额外提供了针对文件操作的...
// 输出 "吃鱼" ``` 在这个例子中,`Cat`类覆盖了`Animal`的`Eat`方法,当通过`Animal`类型的引用调用`Eat`时,实际执行的是`Cat`的实现。 再来看`Practise3_Inherit1`可能涉及的继承层次结构。在C#中,可以实现...
JavaScript提供了多种实现继承的方式,包括经典继承、原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承等。其中,最常见的可能是原型链继承和构造函数继承。 1. **原型链继承**:这是...
在C++编程语言中,继承和多态是面向对象编程(OOP)的两个核心概念。继承允许我们创建一个新类(子类),它继承了另一个类(父类)的属性和方法,从而实现了代码的重用和扩展。多态则是指同一种行为在不同对象上表现...
// 设计一个控制台应用程序,实现教师和学生信息的输入和输出功能。 //学生类有编号、姓名、班号和成绩等字段,教师类有编号,姓名、职称和部门等字段。 //要求将编号、姓名,编号及姓名的输入、显示设计成一个...