黑马程序员技术交流社区

标题: java继承 [打印本页]

作者: 宋大人-专注    时间: 2014-5-21 11:17
标题: java继承
我今天学习遇到了一个新问题,我以前只知道单继承和多继承,现在听说一个单重和多重继承,他们之间是什么关系?
作者: jsjchenlong    时间: 2014-5-21 15:33
我也想知道。。。
作者: lvc    时间: 2014-5-21 18:14
有代码吗?看代码好理解些
作者: Sevenette    时间: 2014-5-21 18:25
java只支持单继承。不过有接口,可以实现多个接口从而弥补单继承的局限性。

单重继承 就是 "我是儿子,我有一个爸爸"
多重继承 就是“我是儿子,我有一个爸爸,我爸爸也有爸爸,……”多层的继承关系。
用代码表现就是↓↓↓

  1. class A{
  2. }

  3. class B extends A{
  4. }

  5. class C extends B{
  6. }
复制代码





作者: wuhyoung    时间: 2014-5-21 19:20
多重继承的概念就是一个类可以同时继承多个类,但就java而言,只可以多重实现,但是一个java不可以同时继承两个类,
形如下面的方式是不可以的

class A extends b,c     其中b和c都是类,这样是不可以的。
但是可以间接方式来用class  A extends b      和class A extends c 来实现多重继承。

还有一种情况就是如果C是一个借口,可以使用如下方式来继承或者说是实现。

class A extends B implements c.
........................................................................................................................................

作者: liang090214    时间: 2014-5-21 21:14
多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承。有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需要思考的不是怎么使用多重继承,而是您的设计是否存在问题.但有时候我们确实是需要实现多重继承,而且现实生活中也真正地存在这样的情况,比如遗传:我们即继承了父亲的行为和特征也继承了母亲的行为和特征。可幸的是Java是非常和善和理解我们的,它提供了两种方式让我们曲折来实现多重继承:接口和内部类。
一、 接口
       在介绍接口和抽象类的时候了解到子类只能继承一个父类,也就是说只能存在单一继承,但是却可以实现多个接口,这就为我们实现多重继承做了铺垫。
       对于接口而已,有时候它所表现的不仅仅只是一个更纯粹的抽象类,接口是没有任何具体实现的,也就是说,没有任何与接口相关的存储,因此也就无法阻止多个接口的组合了。
interface CanFight {
    void fight();
}

interface CanSwim {
    void swim();
}


interface CanFly {
    void fly();
}

public class ActionCharacter {
    public void fight(){
        
    }
}

public class Hero extends ActionCharacter implements CanFight,CanFly,CanSwim{

    public void fly() {
    }

    public void swim() {
    }

    /**
     * 对于fight()方法,继承父类的,所以不需要显示声明
     */
}
复制代码
二、内部类
       上面使用接口实现多重继承是一种比较可行和普遍的方式,在介绍内部类的时候谈到内部类使的多继承的实现变得更加完美了,同时也明确了如果父类为抽象类或者具体类,那么我就仅能通过内部类来实现多重继承了。如何利用内部类实现多重继承,请看下面实例:儿子是如何利用多重继承来继承父亲和母亲的优良基因。
       首先是父亲Father和母亲Mother:
public class Father {
    public int strong(){
        return 9;
    }
}

public class Mother {
    public int kind(){
        return 8;
    }
}
复制代码
    重头戏在这里,儿子类Son:
public class Son {
   
    /**
     * 内部类继承Father类
     */
    class Father_1 extends Father{
        public int strong(){
            return super.strong() + 1;
        }
    }
   
    class Mother_1 extends  Mother{
        public int kind(){
            return super.kind() - 2;
        }
    }
   
    public int getStrong(){
        return new Father_1().strong();
    }
   
    public int getKind(){
        return new Mother_1().kind();
    }
}
复制代码
测试程序:
public class Test1 {

    public static void main(String[] args) {
        Son son = new Son();
        System.out.println("Son 的Strong:" + son.getStrong());
        System.out.println("Son 的kind:" + son.getKind());
    }

}
----------------------------------------
Output:
Son 的Strong:10
Son 的kind:6
复制代码
       儿子继承了父亲,变得比父亲更加强壮,同时也继承了母亲,只不过温柔指数下降了。这里定义了两个内部类,他们分别继承父亲Father类、母亲类Mother类,且都可以非常自然地获取各自父类的行为,这是内部类一个重要的特性:内部类可以继承一个与外部类无关的类,保证了内部类的独立性,正是基于这一点,多重继承才会成为可能。
作者: 凌羽猎风    时间: 2014-5-21 22:24
本帖最后由 凌羽猎风 于 2014-5-21 22:26 编辑

我也是最近刚学这里,单继承可以认为是一个人只能有一个亲爹,不能有多个,这就是单继承。不能有很多个亲爹,所以不能多继承。

多重继承就是,儿子上面有爸爸,爸爸上面还有爸爸的爸爸,也就是爷爷,孙子也可以从爷爷处继承,形象的理解就是这个样子~

作者: 贾俊锋    时间: 2014-5-22 00:53
学习了,
作者: 宋大人-专注    时间: 2014-5-22 08:26
凌羽猎风 发表于 2014-5-21 22:24
我也是最近刚学这里,单继承可以认为是一个人只能有一个亲爹,不能有多个,这就是单继承。不能有很多个亲爹 ...

明白了,谢谢
作者: 宋大人-专注    时间: 2014-5-22 08:30
liang090214 发表于 2014-5-21 21:14
多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它 ...

你的意思是单继承、多继承和个单重和、重继承的概念是一样的吗
作者: 寻找人生目标    时间: 2014-5-22 14:36
就像家谱一样一样的  
作者: 酱油炒饭    时间: 2014-5-22 21:25
路过看看~
作者: Seraphim    时间: 2014-5-23 16:20
java只允许单继承,可以这样理解:继承能够体现事物的本质
但是java允许实现多个接口,接口体现了事物的特点




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2