class A extends B implement C, D

在这段代码中,A继承B,同时实现C和D。
JAVA只支持单继承,但有时也使用上面这样的语法来实现多重继承,那么继承和实现到底是什么关系?

先来说说相同点

都能起到统一接口的作用

A中同时包含了BCD和接口

public class A extends B implements C
{
    public void printA()
    {
        System.out.println( "this is A" );
    }

    public void printC()
    {
        System.out.println( "this is C" );
    }
}
public class B
{
    public void printB()
    {
        System.out.println( "this is B" );
    }
}
public interface C
{
    public void printC();
}
public class Main
{
    public static void main( String[] args )
    {
        A a = new A();
        a.printA();
        a.printB();
        a.printC();
    }
}
可以实现多态
public class A extends B implements C
{
    public void printB()
    {
        System.out.println( "this is A and B" );
    }

    public void printC()
    {
        System.out.println( "this is A and C" );
    }
}
public class A2 extends B implements C
{
    public void printB()
    {
        System.out.println( "this is A2 and B" );
    }

    public void printC()
    {
        System.out.println( "this is A2 and C" );
    }
}
public class B
{
    public void printB()
    {
        System.out.println( "this is B" );
    }
}
public interface C
{
    public void printC();
}
public class Main
{
    public static void main( String[] args )
    {
        B a = new A();
        a.printB();
        B a2 = new A2();
        a2.printB();

        C c = new A();
        c.printC();
        C c2 = new A2();
        c2.printC();
    }
}

语法上的区别

extends implement
术语 继承 实现
对父类的要求 不能继承final类 interface类
父类的数量 只能继承一个类 可以实现多个接口
子类的要求 派生类可以什么都不做就直接使用 必须要实现interface定义的接口才能使用
public class B
{
    public void printB()
    {
        System.out.println( "this is B" );
    }
}
public class A extends B
{
}
public interface C
{
    public void printC();
}
public class A2 implements C
{
    public void printC()
    {
        System.out.println( "this is A2 and C" );
    }
}
public class Main
{
    public static void main( String[] args )
    {
        A a = new A();
        a.printB();

        A2 a2 = new A2();
        a2.printC();
    }
}

用法上的区别

继承与实现在意义上就是不同的,不限于JAVA。
extends中的父类,是把多个子类的相同点抽象出来。继承是子类是父类的功能扩展。扩展的功能是必定是子类特有的功能,是属于这个子类的功能。

public class 鸡
{
    public void eat(){}
    public void sleep(){}
}
public class 乌鸡 extends 鸡
{
    public static color = black;
}
public class 潜水鸡 extends 鸡
{
    public void swim(){}
}

implements提供的是另一种抽象,对接口的抽象,强制要求子类实现某些接口。实现是要求子类增加一些父类的接口。增加的接口不一定是属于这个子类的功能。是为了让子类能够被别的系统使用,必须要实现的接口。

interface 飞
{
    public void 飞行();
}
class 鸟 implements 飞
{
    public void 飞行(){用翅膀飞}
}
class 孙悟空 implements 飞
{
    public void 飞行(){踩着筋斗云飞}
}

results matching ""

    No results matching ""