何为抽象类和抽象方法?
在类的前面有修饰符abstract的类称为抽象类,同理在方法的前面有修饰符abstract修饰的方法称为抽象方法。
那么抽象类和普通类有什么区别呢?
总结如下:
(1)抽象类可以有抽象方法和非抽象方法例如:
abstract class A{
abstract int min(int x,int y);
int max(int x,int y){
return x>y?x:y;
}
}
而普通类不可以有抽象方法例如:
public class Something {
public abstract String doSomething ();
}
类名中会报错The type Something must be an abstract class to define abstract methods,
方法中会报错The abstract method doSomething in type Something can only be defined by an abstract class。
(2)抽象类不能用new创建实例(即对象,但是子类继承了抽象类那么子类必须重写抽象父类的抽象方法。例如
class B extends A{
@Override
int min(int x, int y) {
// TODO Auto-generated method stub
return 0;
}
}
只需要重写抽象方法,普通方法自己选择
(3)抽象类不允许使用final修饰符,并且必须是public和友元权限,故不能使用private和protected
(4)如果抽象类的子类还是抽象类,那么这个子类即可以重写父类的抽象方法,也可以继承父类的抽象方法
abstract class A{
abstract public int min(int x,int y);
int max(int x,int y){
return x>y?x:y;
}
}
abstract class C extends A{
public abstract int min(int x,int y);
}
abstract class D extends A{
public int min(int x,int y){
return x
注意:无论是继承还是重写父类的方法,权限都必须跟高于或等于父类的权限,因为在java中父类可以使用子类的的方法
接下来是抽象方法的总结:
(1)抽象方法不能有方法体,所以没有{}这对大括号,最后面要接分号“;”,实例如下:
public abstract String doSomething ();
(2)不允许使用final修饰,权限不能是private
abstract class Something {
public abstract String doSomething ();
//出现错误The abstract method doA in type Something can only
//set a visibility modifier, one of public or protected
private abstract String doA ();
protected abstract String doB ();
abstract int doInt();
}