java 类的继承

原创 2006年05月16日 20:22:00
类的继承
 
     接触java这么久,经常用到其继承的特性进行类功能的拓展,但是到底继承是怎么工作的一直都没有弄明白.
     平时调试代码的时候发现继承的子类必须在调用构造函数之前调用父类的构造子(没有调用super函数的,jvm在实例化子类的时候会隐式调用),进行父类的初始化,当然了,这一点很容易理解,因为子类的构造子中有可能调用从父类继承过来的函数,而这些函数也就有可能去调用父类的属性,如果这个时候父类中的属性还没有初始化当然会产生意想不到的问题了.
     不过总觉得还是不够清晰,所以翻看了一下电子版的java编程思想. 作者Bruce Eckel在书中提到其实在子类中包含了一个父类的对象(我想应该叫 super吧),想想也是 ,要想在java中调用一个函数有两种方法,一个就是用对象名(普通函数),另外一个就是用类名(静态函数),而我们在子类中经常调用的是父类的普通方法,仔细想想也确实有道理,可是现在又有了一个新的问题,既然是两个包含的对象,他们之间属性的关系又是什么样的呢?不了解这个,我们在调用super.xxx()函数时有可能就达不到我们想要的效果了.
找个简单的例子验证一下
现有一个父类A:
class A
{
    private int test = 0;
    public void setTest(int test)
    {
        this.test = test;
    }
    public int getTest()
    {
        return this.test;
    }
}
和一个继承自它的子类B:
class B extends A
{
    public void printSuper()
    {
        System.out.println(super.getTest());
    }
}
 
在main函数中执行:
B b = new B();
b.setTest(10);
b.printSuper();
System.out.println(b.getTest());
时只是调用了B类对象b的setTest方法,应该说只是改变了b对象的test属性值
输出的结果发现父类和子类的test值都改成了10
 
我想java中确定了在子类中是没有办法访问继承而来的private属性和方法的,或许这个还是一个特例
于是我换了protected,public类型,不过测试结果和上面的没有什么改动
 
 
通过这些我们了解了通过继承而来的子类包含了叫super的直接父类对象,而且继承自而来的属性和父类的对应属性占用的是同一块内存(我们可以放心的使用super.xxx()函数来实现我们想要的功能,把该函数的操作看成是子类的函数调用就可以了),加上这个父类的对象也是private级别的,对于外界来说完全透明的说,所以我们使用起来感觉好像是直接写的包含两个类属性和方法的类一样.所以我们可以当成是普通的组合来使用,不同的是它复制了父类的接口,在实现面向接口编程时有很大的好处(类似实现接口)
类似于:
    public void printSet(Set set)
    {
        Iterator it = set.iterator();
        while (it.hasNext())
            System.out.println(it.next());
    }
 这样子,所有实现了Set接口的子类如:HashSet ,TreeSet的打印工作就不用分别提供函数了
只要传进来就可以了,因为参数的确切类型是在解释器执行代码的时候动态匹配的,所有增加了灵活性

java中类的继承

1.面向对象最重要的特点之一,就是可以实现对类的复用。2.通过“继承”一个现有的类,可以使用已经定义的类中的方法和变量。3.类的方法和属性可以被继承,但是类的构造器不能被继承。4.在Java中,一个类...
  • wwwwsoe
  • wwwwsoe
  • 2007年04月12日 23:48
  • 4363

JAVA面向对象 类的继承

本页面更新日期: 2016年07月30日前言 继承是面向对象的三大特征之一. 也是实现软件复用的重要手段. Java继承具有单继承的特点, 每个子类只有一个直接父类. 继承的特点 ...
  • tmdlife
  • tmdlife
  • 2016年07月26日 20:10
  • 1549

面向对象_Java中类的继承特点

/* Java中继承的特点: A:Java中只支持单继承,不支持多继承。 有些语言是支持多继承的(c++),格式:extends 类1,类2,... B:Java支持多层继承(继承体系) */ ...
  • L1585931143
  • L1585931143
  • 2016年09月26日 22:35
  • 603

Java类与类之间的继承关系

Java父类与子类继承关系,调用的各种关系示例一(子类调用父类函数):// 定义一类 A public class A { // 此方法打印一句话 public void a() { ...
  • u011967006
  • u011967006
  • 2016年12月15日 18:38
  • 1162

JAVA值得注意继承简单例子..

class Base{ int i = 47; private int f(){  System.out.println("Base f()"); System.out.println(this); ...
  • ilwzxy
  • ilwzxy
  • 2014年03月23日 10:47
  • 325

Java千百问_05面向对象(007)_java类的继承有什么意义

点击进入_更多_Java千百问1、继承是什么继承,是面向对象语言的重要机制。 概念:一个类(子类)可以使用从另一个类(父类、超类)继承属性和方法。 java中的继承是单一继承,即一个子类只能有一个...
  • ooppookid
  • ooppookid
  • 2016年04月19日 20:01
  • 2770

java—类与继承小结

类与继承:     java面向对象的原则;         1.封装性:   (1)把对象和行为看成一个密不可分的整体,(2)           “信息隐蔽”把不需要让外界知道的信息隐藏起来...
  • lcd_lcd_
  • lcd_lcd_
  • 2015年06月13日 16:29
  • 216

java继承的一个小例子

父类:package inherit; public class Father { protected String name; public Father(){ name = "fat...
  • snoopy93
  • snoopy93
  • 2011年07月05日 10:06
  • 2762

从头认识java-8.12 内部类的继承

这一章节我们将简短的讨论一下内部类的继承。例子:package com.ray.ch08; import com.ray.ch08.Test.Inner; public class MyClass...
  • raylee2007
  • raylee2007
  • 2015年11月15日 22:25
  • 1839

java里类的继承机制

这次我想深入探究以下java里类的继承机制。我们知道,继承是java设计里的一个失败的地方。高司令说过:如果让他重新设计java的话,他会把继承去掉。而java里继承到底怎么了,会这么不受人欢迎呢?我...
  • yongzhewuwei_2008
  • yongzhewuwei_2008
  • 2006年03月28日 15:03
  • 873
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 类的继承
举报原因:
原因补充:

(最多只允许输入30个字)