`
seaizon
  • 浏览: 145130 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java里类的继承机制-构造方法(转)

    博客分类:
  • java
阅读更多
这次我想深入探究以下java里类的继承机制。
我们知道,继承是java设计里的一个失败的地方。高司令说过:如果让他重新设计java的话,他会把继承去掉。而java里继承到底怎么了,会这么不受人欢迎呢?
我们知道,继承设计的初衷是为了代码复用。在C++里也确实做到了这一点,因为C++允许多重继承。特别是C++里的析构函数,申明为了virtual的时候可以多重复用,用起来也很舒服。
那么为什么在java里继承就这么让人诟病呢?
第一:java里的类不能多重继承,如果一个类一旦继承了它的父类,那么它就别想再继承别的类。一个儿子只能有一个老爸,原本设计是没错的。可是在实际应用中,就会出现各种问题。
第二:java里有更好的接口,接口从本质上来说可以更好的代替继承。实现像C++里一样的宏定义的功能,把你想要的东西都抽象在接口里,让具体的类去实现这些功能。
如果你去面试过,肯定遇到过不少考察java继承机制的题目,其中最显著的一个就是构造函数的调用和重写方法的调用。
这里我再强调一下重载和重写:
重载是同一个类里面相同方法名,不同参数类型或个数的方法。这也是C++类里面为什么出现函数模板的原因,就拿求和来说:
int add(int a,int b);
long add(long a,long b);
int main(){
}
因为求和可能是求int的和,也可能是求long的和,这个时候就出现了需求(我始终认为,一种东西的出现必定是因为对他的需求)
而重写呢,就是子类对父类里的方法的重改,就是他改写了父类的方法。伦理上看似不孝,而道理上是事物总是要不断发展的。这就像是社会的改革一样。
下面我来分析一下父类和子类的构造函数调用顺序:
在内存机制中,父类和子类是占用同一块内存的,只不过子类在父类的基础上增加了自己的部分(包括数据成员和属性),这样一来就好理解了。子类是依附于父类的,先有父类再有子类。所以说一个子类对象的产生,必须先调用父类的构造函数产生一个父类实例,然后在这个实例基础上添加自己的部分。
而实际的运行机制,也正是这样的。
因为这样就很容易理解了,先调用父类的构造函数,再调用子类的构造函数。
而对于父类和子类里重写的方法的调用,关键要看:子类到底是否产生,如果子类产生了,子类改写了父类的方法,看似父类和子类各自有一个方法,其实它们在内存模型里占用的是同一块内存,子类方法会覆盖父类方法。
我们看下面的程序:
class SuperStringTest {
    SuperStringTest(){
           System.out.println("Father is constructed.");
    }
   
    public void test(){
           System.out.println("Father is running.");
    }
}
 
public class StringTest extends SuperStringTest{
      
       StringTest(){
           System.out.println("Son is constructed.");
    }
      
       public void test(){
           System.out.println("Son is running.");
    }
      
       public static void main(String[] args){
              /*
              SuperStringTest sst = new StringTest();
 
              此时,派生类的方法覆盖了基类的方法,基类的方法对派生类来说为不可见(有先像作用域),也就是派生类里的同名方法重新写了基类的同名方法。此时,对基类和派生类来说只有被派生类改写后的唯一的一个方法。所以,只能调用派生类的方法。
 
              Father is constructed.
              Son is constructed.
              Son is running.
              */
             
              /*
              StringTest sst = new StringTest();
             
解释同上面
 
              Father is constructed.
              Son is constructed.
              Son is running.
              */
             
              /*
              SuperStringTest sst = new SuperStringTest();
             
        此时,基类所占的内存单元中并没有派生类的东西。所以,方法没被改写,调用父类的方法。
 
              Father is constructed.
              Father is running.
        */
              sst.test();
       }
}
分享到:
评论

相关推荐

    java实验三 类的继承--圆.rar

    在Java编程语言中,类的...通过这个实验,学生将更好地理解Java中类的继承机制,并能将其应用到实际的编程项目中。这不仅是学习Java的基础,也是进一步学习高级概念,如接口、抽象类、异常处理和集合框架的关键步骤。

    java中的继承(子类调用父类构造方法还不懂).doc

    Java 中的继承(子类调用父类构造方法还不懂) Java 中的继承是指一个类可以继承另一个类的属性和方法,这样可以实现代码的复用和提高开发效率。在 Java 中,继承使用关键字 `extends` 来实现。 Java 中继承的注意...

    java继承类实例

    总的来说,这个程序展示了Java中类的继承机制,如何通过构造方法传递参数来初始化对象,以及子类如何覆盖或扩展父类的属性。理解这些概念对于进行Java编程至关重要,因为它们构成了面向对象设计的基础。通过这样的...

    JAVA题库习题及答案--.doc

    Java期末考试复习时,应重点掌握这些基础知识,同时理解并能灵活运用类和对象的创建、继承、封装和多态性,熟悉Java集合框架的使用,理解异常处理机制,以及熟悉Java的输入输出和网络编程。通过做题和解答,可以有效...

    Java面向对象之继承练习题.doc

    【Java面向对象之继承练习...通过上述练习,可以深入理解Java中的继承机制,如何定义类和方法,以及如何通过继承扩展功能。同时,练习涵盖了构造方法、属性和方法的重写、多态以及类之间的关系等核心面向对象编程概念。

    Java 接口与继承

    Java中的继承和接口是面向对象编程的关键特性,它们在软件设计中扮演着至关重要的角色,实现了代码的重用和类的层次结构。 继承是Java中创建新类的一种方式,它允许一个子类(SubClass)从一个已存在的父类...

    Java继承时构造函数的调用

    Java中的继承机制是面向对象编程的核心特性之一,它允许子类继承父类的属性和方法,从而实现代码的复用和扩展。在这个场景中,我们关注的是Java继承时构造函数的调用规则。 首先,每个Java类都有一个或多个构造函数...

    Java中extends类的继承

    在Java编程语言中,`extends`关键字用于实现类的继承机制。类的继承是面向对象编程的一个核心特性,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用和扩展。下面将详细探讨`extends`...

    Java面向对象程序设计-如何使用继承(录).pptx

    这是因为Java语言不支持多继承机制。 2. 在子类的构造方法中,必须将父类的构造方法调用放在第一句,否则将会出现编译错误。 3. 在子类中,可以使用super关键字来调用父类的方法和属性。 继承的使用可以使得代码...

    《java面向对象程序设计-继承和多态》教案.doc

    通过实现接口,类可以拥有接口中声明的所有方法,这在单一继承机制下提供了更多的灵活性。接口还常用于定义常量,提供常量值的统一管理。 总结来说,Java的面向对象设计包括封装、继承和多态,这些特性使得代码更加...

    Java的继承机制详解

    Java的继承机制是面向对象编程中的核心特性,它允许一个类(子类)从另一个类(父类)继承属性和方法,从而实现代码的复用和扩展。在Java中,继承具有以下特点: 1. 单继承:不同于C++等语言,Java仅支持单继承,即...

    Java 类和继承相关代码集

    Java 类和继承是面向对象编程的核心概念,它们构成了Java程序设计的基础。在这个代码集中,我们很显然会看到一系列关于如何创建和使用Java类以及实现继承的示例代码。以下是对这些概念的详细解释: 1. **Java 类**...

    java类的继承实例

    Java 类的继承是其面向对象特性中的核心概念之一,它为代码重用和构建复杂的软件结构提供了基础。在 Java 中,一个类可以扩展另一个类的功能,这个被...理解并熟练运用继承机制,对于编写高质量的 Java 应用至关重要。

    java-数组与方法及面向对象基础

    接口则是一组方法签名,提供一种多继承机制。 总结,Java中的数组、方法和面向对象是构建程序的基础。熟练掌握这些概念,能帮助初学者逐步进入Java编程的世界,进一步探索更复杂的技术和框架。不断实践和理解,将有...

    论JAVA继承机制中父类与子类的关系

    ### 论JAVA继承机制中父类与子类的关系 #### 摘要 本文深入探讨了Java语言中的继承机制,并重点分析了父类与子类之间的关系。文章围绕子类继承父类成员的过程、成员变量及方法的赋值、重写、覆盖等问题展开讨论,...

    Java中构造方法的深入研究与探讨.pdf

    本文探讨了 Java 中构造方法的概念、特点和应用,通过对构造方法的深入研究和探讨,阐述了其在继承和设计模式中的重要作用。 知识点一:构造方法的概念和特点 构造方法是 Java 中一个特殊的方法,它用来初始化对象...

    java继承部分课件

    Java继承是面向对象编程中的一个核心概念,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的重用和扩展。在这个名为"java继承部分课件"的资料中,我们可以期待学习到关于Java继承的基础知识、...

    Java应用程序-习题-第5章.doc

    本文将详细解释 Java 应用程序习题第五章中的知识点,包括继承关系、方法覆盖、方法重载、构造方法、类型转换等重要概念。 1. 继承关系 在 Java 中,类 Student 继承自类 Person,这是一种继承关系。继承关系是一...

    java继承例题

    Java继承机制详解 Java继承是面向对象编程(OOP)的一种机制,允许一个类继承另一个类的成员变量和成员方法。通过继承,可以实现代码的重用和扩展。 在Java中,继承是通过使用关键字`extends`来实现的。例如,`...

Global site tag (gtag.js) - Google Analytics