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类的继承

java进阶--继承类

java进阶--继承类

Java中extends类的继承

Java类继承初始化顺序

  • 2016-09-02 12:27
  • 11KB
  • 下载

java继承中父类变量引用子类对象的问题--有关动态绑定

java 第一遍,动态绑定笔记Java核心技术卷(一)153页: //类的设定: //子类Manager继承于父类Employee //父类方法有getName(),getSalary() ...

Java中的复用类——继承、组合和代理hello

一:继承   继承按现有类创建一个对象,不改变现有类,采用现有类的形式向其中添加新代码;(编译器强制你去初始化基类,是is_a 的关系,比如说Student继承Person,则说明Student i...

java IO 类继承关系图

  • 2011-05-28 09:52
  • 65KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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