扩展派生类时,抽象类和非抽象类之间有什么区别?我都没有使用方法覆盖和抽象方法(即抽象类)。我只是继承了这些属性。什么和为什么喜欢上课?
例如:
代码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 {
...
}
答案 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)
为了更好地理解,我们可以将抽象类与接口进行比较,主要差异是:
因此,当你创建一个扩展抽象类的子类时,你需要实现抽象类中的抽象方法(如果有的话),否则,子类仍然是一个抽象类 - 它无法实例化! !
此外,如果您只想声明一些方法签名,则可以使用接口而不是抽象类。
答案 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.