抽象类和接口
1 抽象类&抽象方法的定义
抽象方法定义的格式:
public abstract 返回值类型 方法名(参数);
抽象类定义的格式:
abstract class 类名 {
}
2 抽象类的特点:
1、抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。
2、抽象类不可以直接创建对象,原因:调用抽象方法没有意义。
3、只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。
public abstract class Developer { //抽象方法没有方法体 public abstract void work(); } public class JavaEE extends Developer{ //抽象方法 public void work(){ System.out.println("JavaEE工程师写JavaEE代码"); } } public class Test { public static void main(String[] args) { JavaEE java=new JavaEE(); java.work(); } }
3 抽象类的细节问题:
1、抽象类一定是个父类?
是的,因为不断抽取而来的。
2、抽象类中是否可以不定义抽象方法。
是可以的,那这个抽象类的存在到底有什么意义呢?不让该类创建对象,方法可以直接让子类去使用
3、抽象关键字abstract不可以和哪些关键字共存?
l 1、private:私有的方法子类是无法继承到的,也不存在覆盖,而abstract和private一起使用修饰方法,abstract既要子类去实现这个方法,而private修饰子类根本无法得到父类这个方法。互相矛盾。
l 2、final
l 3、static
4 接口概念
接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。
接口定义时需要使用interface关键字,类实现接口使用implements。
public interface Myinterface { //接口中所有成员变量修饰符public static final //static 静态:只要被static修饰的成员,在外界可以直接通过类名.成员调用 //final 最终的:被final修饰的变量叫常量,一次赋值终身不变 public static final int a=0; //接口中所有方法的修饰符都是 public abstract public abstract void a(); } //类实现接口 public class MyinterfaceImp implements Myinterface{ public void a(){}; }
在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑。
接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变。
接口不可以创建对象。
接口最重要的体现:解决单继承的弊端。将类的单继承这种机制在java中通过多实现完成了。