抽象类
-
abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法匿名该方法就是抽象类;如果修饰类,那么该类就是抽象类
-
抽象类中可以没有抽象方法。但是抽象方法的类一点要声明为抽象类
-
抽象类不能用new关键字来创建对象,它是用来让子类继承的
-
抽象方法只有方法的声明,没有方法的实现,它是用来让子类实现的
-
子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类
package opp.oop8; //abstract 抽象类 public abstract class Action { //abstract,抽象方法,只有方法名字,没有方法的实现! public abstract void doSomething(); //1.不能new这个抽象类,只能靠子类去实现它:约束! //2.抽象类中可以写普通的方法 //3.抽象方法必须在抽象类中 public static void method(){ System.out.println("普通方法"); } }
子类:需重写抽象类的方法
package opp.oop8; public class A extends Action{ @Override public void doSomething() { } }
接口
-
普通类:只有具体实现
-
抽象类:具体实现和规范(抽象方法)都有
-
接口:只有 规范
-
接口的本质是契约,制定之后,大家都需遵守
-
声明类的关键字是class,声明接口的关键字是interface
package opp.oop9; //interface 定义的关键字 public interface UserService { //常量:public static final int AGE=99; //接口中的所有定义其实都是抽象的:public abstract public abstract void add(String name); void delete(String name); void update(String name); void query(String name); }
package opp.oop9; public interface TimeService { void timer(); }
implements
-
实现了接口的类,就需要重写接口中的方法
-
利用接口实现多继承
-
implements实现接口的类
package opp.oop9; //实现了接口的类,就需要重写接口中的方法 //利用接口实现多继承 public class UserServiceImpl implements UserService,TimeService{ @Override public void add(String name) { } @Override public void delete(String name) { } @Override public void update(String name) { } @Override public void query(String name) { } @Override public void timer() { } }