`
- 浏览:
150836 次
- 性别:
- 来自:
北京
-
class Base{
private int i = 2;
public Base(){
System.out.println(this.getClass());
this.display();
}
public void display(){
System.out.println("Base中的方法"+i);
}
}
class Derived extends Base{
private int i = 22;
public Derived(){
i = 222;
}
public void display(){
System.out.println("Derived中的方法"+i);
}
}
public class Test {
public static void main(String[] args){
new Derived(); }
}
/**************/
输出结果:
class crazy.chapter2.object.Derived
Derived中的方法0
构造器只是负责对java对象实例变量执行初始化(赋值),在执行构造器之前,该对象所占的内存已经被分配下来,这些内存里值都是空值——对于基本类型的变量,默认值都是0或false;对于引用类型的变量,默认值都是null。当程序调用粗体部分时,系统会先为Derived对象分配2块内存空间,分别用来存放Derived对象的两个i实例变量,一个属于Base,另一个属于Derived,此时这两个实例变量都为0。接下来,在执行Derived类构造器之前,首先会执行Base类的构造器。由于Base构造器是在Derived中执行的,所以Base构造器中的this指的是Derived类。this.display()就是调用Derived类中的display方法。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
3. **变量隐藏**:如果子类和父类有同名的实例变量,子类变量会“隐藏”父类变量。通过父类引用访问这些变量时,实际访问的是父类的变量,而非子类的。 4. **类型转换**:虽然父类引用可以指向子类对象,但反过来...
在Objective-C中,对象的初始化和实例变量的作用域是编程中的关键概念,对于理解和创建健壮的iOS和macOS应用程序至关重要。 首先,让我们深入理解对象的初始化过程。在Objective-C中,初始化通常涉及`init`方法。每...
在类的外部,实例变量需要通过对象引用来访问。在示例代码中,`Employee empOne = new Employee("Ransika");`创建了一个`Employee`对象,并通过`empOne`引用访问其实例变量。在静态方法中或类的外部,我们必须使用...
实例变量以`@`开头,它们是对象的私有属性,只能在对象内部访问。每个实例都有自己独立的一套实例变量,互不影响。 ```ruby class Person def initialize(name) @name = name end def introduce puts "Hi, I...
这是因为子类实例变量是在父类实例变量的基础上增加的,因此需要先初始化父类的实例变量。 接下来,关于访问修饰符的影响。在实例化过程中,如果父类的构造器是私有的(private),那么子类无法直接访问,除非在...
`private`限制了实例变量只在当前类内可访问,`protected`使得子类也能访问,而`public`则允许所有类访问。在上述`Employee`类中,`name`被声明为`public`,而`salary`是`private`的,可以通过`setSalary`方法进行...
这意味着一个子类对象可以被当作基类对象来处理。例如: ```csharp public class BaseClass { public void CommonMethod() { Console.WriteLine("This is a common method in BaseClass."); } } public class ...
然而,这种多态性并不意味着可以通过父类引用直接访问子类特有的成员,只有子类类型引用才能做到。这涉及到Java的动态绑定机制,即方法调用和实例变量访问都是在运行时基于对象的实际类型决定的。 5. **内存控制...
然而,有一个重要的概念是:子类对象不能直接调用父类中的虚函数。下面我们将深入探讨这些知识点。 首先,让我们了解`指针`和`引用`。在C++中,`指针`是一个变量,它存储了另一个变量的地址。通过指针,我们可以...
本文将深入探讨Java中的多态性,特别是“父类引用子类对象”的概念,以及这一特性如何在实际编码中体现。 ### 多态性概述 多态性主要通过方法的重写(Overriding)、重载(Overloading)和动态绑定(Dynamic Binding)来...
5. **访问对象的方法和属性**:一旦对象被实例化,我们就可以通过对象变量访问其方法和属性。例如,`obj.display();`会打印出"Name: John"。 在实际开发中,我们可能遇到多态性,接口,抽象类等复杂情况。例如,...
- 创建子类对象时,系统会同时为子类及其父类的实例变量分配内存空间。 - 如果子类定义了与父类相同的实例变量,则子类实例变量会覆盖父类中的同名变量。 - 为了在子类方法中访问父类中被隐藏的实例变量,可以使用`...
多态是指一个父类引用可以指向其子类对象,使得同一个方法根据对象的实际类型表现出不同的行为。 类是Java中的基础构造单元,它包含了数据成员(变量)和成员函数(方法)。构造函数是类中的特殊方法,用于初始化新...
- **实例变量**:上转型对象只能访问父类中声明的实例变量,而不能访问子类特有的实例变量。 #### 3. 上转型对象的动态绑定 在Java中,方法调用是动态绑定的,即在编译时只知道方法的签名,而在运行时才确定实际...
类实例方法可以读取和修改实例变量的值,也可以执行其他任务,但它们总是在对象实例的上下文中运行。 3. 类变量: 类变量是在类的定义中使用@@符号声明的变量,它们属于整个类,而不是某个特定对象的实例。这意味着...
子类对象可以赋值给父类类型的引用,但此时该对象实际上仍然是一个子类实例,只是从编译角度看作父类类型。这种特性称为“多态”。 示例代码如下: ```java public class SuperClass { protected String ...
实例变量只能通过实例对象访问,而类变量可以通过类名或实例对象访问。如果在实例方法中重写类变量,那么实例变量将覆盖类变量,除非明确地通过类名访问。 ```python gao.population = 100 # 修改 gao 的人口,但这...
在Java编程语言中,访问控制是面向对象设计的重要组成部分,它定义了类、接口、方法以及变量的可访问性。本实例"实例8访问控制"旨在深入探讨Java中的访问修饰符及其在实际编程中的应用。以下是对这个实例的详细解析...