没有继承就可以抽象吗? java

abstraction can be done without inheritance? java

没有继承可以抽象吗?这是我的代码

     abstract class whatever
{
    abstract void disp1();
    abstract void disp2();
    abstract void disp3();
}

 class what {

    void disp1()
    {
        System.out.println("This is disp1");
    }
}



public class threeClasses {

    public static void main (String args[])
    {
        what obj =new what();
        obj.disp1();

    }

}

请注意上面,我是如何:

  1. 没有从抽象 class "whatever" 扩展 class "what" 但是代码运行完美没有错误
    1. 没有将 class "what" 声明为抽象的(因为它没有声明其他两个方法 disp2() 和 disp3())

我很困惑。请帮忙

您没有使用 whatever(并且应遵守 Java 命名约定)。 abstract class(和继承)背后的想法是有一个接口契约。让我们用一个更实际的例子来研究它,

abstract class Whatever {
    abstract void disp1();

    void disp2() {
        System.out.println("disp2");
    }

    void disp3() {
        System.out.println("disp3");
    }
}

然后 What 扩展它。重写两个方法进行演示(注解是一个很有用的编译时安全检查)

class What extends Whatever {
    @Override
    void disp1() {
        System.out.println("This is disp1");
    }

    @Override
    void disp2() {
        System.out.println("This is disp2");
    }
}

最后,通过Whatever 契约

What 实例上调用方法
public static void main(String args[]) {
    Whatever obj = new What();
    obj.disp1();
    obj.disp2();
    obj.disp3();
}

输出

This is disp1
This is disp2
disp3

请注意,What 提供 disp1disp2 的实现,而 Whatever 提供 disp3

你的抽象 class 和你的具体 class 之间没有关系。不管你对 "abstraction" 的定义是什么,它实际上代表了类型之间的一种关系。 abstract 关键字不 建立 class 之间的关系,它 表示 这种关系,而不是单独的。关系需要从双方延伸。

abstract 是来自一方的关于必须遵守的承诺的声明,对于继承类型实现抽象方法或从其继承类型请求该承诺。

另一方通过成为从抽象类型继承的 class 来做出承诺。如果没有继承,具体类型将失去 is-a 连接。

如果您更正所犯的一个重大错误,您将得到您抱怨遗漏的编译器错误。您未能使用 @Override 注释。 总是当你打算覆盖一个方法时使用@Override注解,否则你将永远享受你在这里展示的那种错误。

我想他的意思是如果我们不继承abstractclass就可以实现abstractclass的方法。

你可能在想我们是否可以用 composition/association/aggregation 关系做到这一点。

对此,我会回答:不,因为你不能创建抽象对象 class 因为在这些关系中你必须创建对象或对象的引用。

所以,实现抽象方法的唯一途径就是继承。