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继承_抽象类与接口的应用.

  • 2015年01月06日 16:10
  • 225KB
  • 下载

Java集合类的继承关系MindManager

  • 2016年05月18日 21:27
  • 1.12MB
  • 下载

Java中继承thread类与实现Runnable接口的区别

Java中线程的创建有两种方式:   1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类  ...

java 继承泛型类示例

  • 2010年06月21日 16:26
  • 59KB
  • 下载

java类的继承实例

  • 2017年12月01日 20:59
  • 4KB
  • 下载

Java多线程方面的编程笔试题(通过继承Thread类启动线程)

/*  * 写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。要求用线程间的通信。  * 注:分别给两个对象构造一个对象o,数字每打印两个或字母...

java类的继承

  • 2014年12月12日 14:46
  • 1KB
  • 下载

Java语言中的类的继承和多态

  • 2008年12月01日 16:37
  • 4KB
  • 下载

Java中static静态类和静态方法隐藏、重写、继承

Java静态类   在Java世界里,经常被提到静态这个概念,static作为静态成员变量和成员函数的修饰符,意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成...

Java中extends类的继承

  • 2016年06月07日 12:16
  • 8KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 类的继承
举报原因:
原因补充:

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