美文网首页
java可以实现“多继承”了

java可以实现“多继承”了

作者: 雨中星辰0 | 来源:发表于2021-04-12 20:52 被阅读0次

    总所周知,java中本质上是不支持多继承的,比如下面这样:

    class A extends B,C
    

    但其实不能这样写,因为java不支持多继承。
    但是你可以像下面这样实现继承多个类

    class B extends C
    class A extends B
    

    这样C就同时继承了B和A两个类,但是这样方式其实是有问题的,它虽然从某种程度上来说确实达到了多继承的目的,但class Bclass C,本质上是没有继承关系的,我们为了实现多继承的目的,就强迫B继承C,这是不合理的。那还有没有别的办法可以解决呢?有!java中虽然类不可以多继承,但是接口可以,将上面的demo改一下变成了这样。

    interface BIntf
    interface CIntf 
    interface AIntf extends BIntf,CIntf
    
    class A implements AIntf
    class B implements BIntf
    class C implements CIntf
    

    通过这样的方式,class A也达到了“多继承”的目的。

    但这样,仍然是比较麻烦的,还有没有更好的办法呢?有,也没有,在java8以后,接口是可以由默认方法的,那如果我们的接口中的所有方法都有默认实现,那除了不能实例化,从某些角度来说,它是不是就可以看成class了,那java 类实现多个接口,是不是就相当于多继承了呢?
    例:

    /**
     * @author star
     * @descripton 测试接口
     * @date 2021/4/12
     **/
    public interface TestIntf {
        default public void printf(String word) {
            System.out.println("TestIntf:" + word);
        }
    }
    
    
    /**
     * @author star
     * @descripton 多继承测试类
     * @date 2021/4/12
     **/
    public class MutiExtendTest implements TestIntf,TestIntf2{
        public static void main(String[] args) {
            MutiExtendTest mutiExtendTest = new MutiExtendTest();
            mutiExtendTest.printf("star");
            mutiExtendTest.print2("star");
    
        }
    }
    
    
    /**
     * @author star
     * @descripton 测试接口
     * @date 2021/4/12
     **/
    public interface TestIntf2 {
        default public void print2(String word) {
            System.err.println("TestIntf:" + word);
        }
    }
    
    

    但通过这种取巧的方式有一个问题,类实现的多个接口中不能有一样的方法,否则就会报错,java它不知道应该用哪个方法实现。

    相关文章

      网友评论

          本文标题:java可以实现“多继承”了

          本文链接:https://www.haomeiwen.com/subject/gzvxlltx.html