相关疑难解决方法(0)

接口与抽象类(通用OO)

我最近接受过两次电话采访,其中我被问及接口和抽象类之间的区别.我已经解释了他能想到的每一个方面,但似乎他们在等我提一些具体的东西,我不知道它是什么.

根据我的经验,我认为以下是正确的.如果我错过了重点,请告诉我.

接口:

在接口中声明的每个单独的方法都必须在子类中实现.接口中只能存在事件,代理,属性(C#)和方法.一个类可以实现多个接口.

抽象类:

只有抽象方法必须由子类实现.Abstract类可以有实现的常规方法.Abstract类还可以在Events,Delegates,Properties和Methods旁边有类变量.由于C#中不存在多重继承,因此类只能实现一个抽象类.

  1. 毕竟,面试官想出了一个问题"如果你有一个只有抽象方法的抽象类怎么办?那么它与界面会有什么不同?" 我不知道答案,但我认为这是上面提到的继承权吗?

  2. 另一位采访者问我,如果你在界面中有一个Public变量,那么它与Abstract Class有什么不同?我坚持认为你不能在界面中有一个公共变量.我不知道他想听到什么,但他也不满意.

另见:

oop abstract-class interface

1372
推荐指数
30
解决办法
69万
查看次数

理解Java中抽象类的目的

假设我有两个类,A和B.A类被定义为抽象,而B扩展了这个抽象类,最后我测试结果,两个类都是同一个包的一部分.

public abstract class A {

    protected abstract void method1(); 

    protected void method2() { 
        System.out.println("This is Class A's method"); 
    } 
}

public class B extends A {

    @Override
    protected void method1() {
        System.out.println("This is B's implementaiton of A's method");
    } 
}  
Run Code Online (Sandbox Code Playgroud)

现在当我测试它们时:

B b = new B();
b.method1();
b.method2();  
Run Code Online (Sandbox Code Playgroud)

我得到预期的输出:

This is B's implementaiton of A's method
This is Class A's method
Run Code Online (Sandbox Code Playgroud)

问题:

  • @Override关键字的目的是什么,因为如果省略它,它仍然可以正常工作.
  • 如果我没有实现抽象方法,我会收到编译错误.那么实现接口有什么不同呢?
  • 另外,我也可以method2()在B中实现.然后输出更改为B中使用的内容.这是否也会覆盖父类方法?那么在A类中将方法明确定义为抽象的目的是什么?

java abstract-class overriding

13
推荐指数
2
解决办法
2万
查看次数

标签 统计

abstract-class ×2

interface ×1

java ×1

oop ×1

overriding ×1