abstract类(抽象类)
abstract类(抽象类)
abstract class A{
}
** abstract()方法**
abstract int min(int x,int y);
- abstract类中可以有abstract()方法,也可以没有有abstract()方法。
- abstract类不能使用new运算创建对象。他只能被子类继承时才能发挥作用,且子类必须重写其abstract()方法,对于非abstract()方法可以重写,也可不重写,根据情况而定即可。即使抽象类中不包含抽象方法也不能被实例化。
- 对于abstract()方法,只允许声明,不允许实现,即没有方法体,也没有花括号。这样的方法必须在abstract类被继承时进行重写,所以不允许用final关键字修饰abstract类或方法。因为final修饰的类或方法是不允许北继承或者重写的。
- 具体子类在继承抽象类时,必须重写其所有抽象方法,否则,仍是一个抽象类。由此,也可知,抽象类可以继承抽象类。
- abstract类中可以有构造方法,但不能有抽象构造方法。
因为子类不继承父类的构造方法,对于抽象方法必须进行重写,而二者相互矛盾。 - 模板方法设计模式是抽象类的一个典型应用。
- 抽象类:直接定义的抽象类;继承抽象类没有重写其全部的抽象方法;实现接口没有重写其全部的抽象方法。
interface接口
interface 接口名称{
}
接口体中包括常量和抽象方法两部分,注意没有普通成员变量和普通成员方法方法。
接口中方法的修饰符为public abstract,常量的修饰符为public static final。以上修饰符号均可省略。
public final int a=100;//等价写法:int a=100;
public abstract int sum(int x,int y);//等价写法: int sum(int x,int y);
抽象类和接口的比较
- 均不能使用new运算创建对象
- 在接口中只可以有abstract方法,不能有普通成员方法。在abstract类中,既可以有abstract方法,也可以有普通成员方法。
- 在接口中只可以有常量,不能有变量。在abstract类中,既可以有常量,也可以有变量。
abstract class A{
public int a=5;//这样定义变量可以
public int a=a+5//这样不可以
}
- 抽象类中可以有构造方法,接口中不能有构造方法
- 抽象类中可以包含静态方法,接口中没有静态方法。
- 一个类可以实现多个接口,但只能继承一个抽象类
- 抽象类中抽象方法的访问类型可以是public,protected和默认类型。
接口中抽象方法访问类型只有public。