扩展抽象类和非抽象类有什么区别?

时间:2011-11-09 11:25:07

标签: java inheritance

扩展派生类时,抽象类和非抽象类之间有什么区别?我都没有使用方法覆盖和抽象方法(即抽象类)。我只是继承了这些属性。什么和为什么喜欢上课?

例如:

代码1:

abstract class a {  
    protected int empnno; 
    protected String empname; 
} 

class b extends a { 
    ...
}

代码2:

class a {  
    protected int empnno; 
    protected String empname; 
}

class b extends a { 
    ...
}

6 个答案:

答案 0 :(得分:14)

  

扩展抽象类和非抽象类有什么区别?

抽象类可能有抽象方法。抽象方法是没有实现的方法,这些必须由子类实现(除非你的子类也是抽象的)。

由于你的a类没有抽象方法,因此从子类的角度来看,没有什么区别。 (唯一的区别在于,如果a是抽象的,它可能不再被实例化。它可能只是根据子类实例化。)

答案 1 :(得分:2)

抽象方法是在没有实现的情况下声明的方法(没有大括号,后跟分号),如下所示:

abstract void moveTo(double deltaX, double deltaY);  

如果一个类包含抽象方法,那么该类本身必须声明为abstract,如:

public abstract class GraphicObject {
   // declare fields
   // declare non-abstract methods
   abstract void draw();
}

抽象类是一个声明为abstract的类 - 它可能包含也可能不包含抽象方法。抽象类不能被实例化,但它们可以被子类化 差异: -
 抽象类无法实例化 普通类不能有抽象方法。
您的代码: B / W Code1和code2与代码的区别在于code1的属性只能通过继承来使用 但是在code2中,你可以创建它的对象并在那里使用那里的属性..

答案 2 :(得分:1)

为了更好地理解,我们可以将抽象类接口进行比较,主要差异是:

  1. 虽然抽象类可能包含字段/属性和具体内容 方法,接口可能只包含抽象方法(方法 签名)。
  2. 一个类可以实现多个接口,而它只能扩展一个类,抽象或不抽象。
  3. 因此,当你创建一个扩展抽象类的子类时,你需要实现抽象类中的抽象方法(如果有的话),否则,子类仍然是一个抽象类 - 它无法实例化! !

    此外,如果您只想声明一些方法签名,则可以使用接口而不是抽象类。

答案 3 :(得分:0)

实际上它们是相同的,但是你无法实例化Abstract类。因此,如果您希望没有人尝试实例化您的类,您希望将其设为Abstract。

答案 4 :(得分:0)

抽象类将包含没有实现的抽象方法。

扩展此类时,有时您可能只决定为某些抽象方法提供实现。在这种情况下,您已经扩展了一个抽象类,但子类仍然是抽象的。

如果你实现了所有的抽象方法,你的子类通常不是抽象的(尽管没有什么可以阻止你声明它,AFAIK)。

答案 5 :(得分:0)

假设有一个B类和A类,其中A延伸为。以下是可能的情况:

1. B is abstract

1.1. B doesn't have abstract methods

1.1.1. A is abstract

1.1.1.1. You don't want to instantiate A. Everything is fine.

1.1.1.2. You want to instantiate A. That's not possible, you can't create abstract objects

1.1.2. A is not abstract. Everything is fine

1.2. B has at least an abstract method

1.2.1. A is abstract

1.2.1.1. You don't want to instantiate A. Everything is fine.

1.2.1.2. You want to instantiate A. That's not possible, you can't create abstract objects

1.2.2. A is not abstract

1.2.2.1. A doesn't implement all the abstract methods. You can't run your project until you change this

1.2.2.2. A implements all the abstract methods. Everything is fine.

2. B is not abstract

2.1. A is abstract

2.1.1. You want to instantiate A. Error.

2.1.2. You don't want to instantiate A. No problem

2.2. A is not abstract. No problem.