如果从一个抽象类继承,而且想生成新类型的一个对象,就必须为基础类中的所有抽象方法提供方法定义。如果不这样做(完全可以选择不做),则衍生类也会是抽象的,而且编译器会强迫我们用abstract关键字标志那个类的“抽象”本质。
问题:
如果类B从抽象类从A继重,类C继便类B,类C会不会是抽象类?
(假如类B都定义了抽象方法,类C没有定义抽象类A中的抽象方法)
问题:
如果类B从抽象类从A继重,类C继便类B,类C会不会是抽象类?
(假如类B都定义了抽象方法,类C没有定义抽象类A中的抽象方法)
大家帮我解决一下.
这是一个例子:
abstract class a{
public abstract String getName();
}
class b extends a{
private String name;
public b(String name){
this.name = name;
} public String getName()
{
return name;
}
}
abstract class c extends b
{
public c(String name) {
super(name);
}
public abstract void abc();
}
注意如果 构造函数带参数的话,那么继承的那个类必须有个带参数的构造函数。用来构造你继承过来类,比如这里的b类。
抽象类和一般类的不同在于:1.抽象类可以有抽象方法。2.抽象类不能被实例化。
3.如果抽象类A被B继承,那么B要么定义所有A中的抽象方法,要么B也作为一个抽象类。
interface: 1.它也可以有域成员,但必须用static final 来修饰。
2.接口中的方法都是public的,所以声明时无须再加public修饰。接口中的方法不能定义方法体。
再很少情况下,接口和抽象类是等价的。比如抽象类里除了抽象方法,没有别的了。但是接口更能起到规范的作用。
(假如类B都定义了抽象方法,类C没有定义抽象类A中的抽象方法)
----------------------------
类B都定义了抽象方法是指都实现了抽象方法吗,如果是这样,B就不再是抽象类,那么C也就不是抽象类了。
如果B只定义那些抽象方法并不全部实现那些抽象方法,那么B就是抽象类,这时候就看C继承B以后是否把B没完全实现的抽象方法实现,如果实现了,C就不是抽象类,如果没实现,C就是抽象类。加一问题:interface和抽象类区别?
---------------------------
一个类可以同时实现多个接口,可以弥补java不提供多继承的缺陷,抽象类只能单继承。
接口的方法都没有具体实现,抽象类可以实现一部分方法,只要有一个方法没被实现,即有一个方法被定义为absctract,那么该类就是抽象类。
如果子类实现了父类的抽象方法,那么子类也仍然可以定义为abstract,即使子类中一个abstract方法都没有,是不是抽象类完全取决于他有没有abstact,有就是,没有就不是
接口和抽象类都是不能实例化的个人认为他们差不多,但是由于JAVA只支持单一继承,但允许实现多个接口,如果你的一个类继承了另外一个类,那么只能使用实现接口咯,所以我认为在没有特殊情况下不要使用抽象类!