相关文章推荐
憨厚的硬盘  ·  Optimizer Hints | ...·  6 月前    · 
直爽的饭盒  ·  用Gdk::Pixbuf::create_f ...·  11 月前    · 
腼腆的红茶  ·  2023 年微博图床 403 ...·  2 年前    · 
威武的火车  ·  android - Why ...·  2 年前    · 

创建抽象类需要用到abstract关键字来修饰类,我们希望通过这个通用的类操作一系类方法,如果没有具体的内容,这个抽象类的意义只有一个,就是不让其他类实例化这个抽象类的对象,只能实例化它的子类对象;要达到操控,Java给我们提供了抽象方法的机制,抽象方法也是使用abstract关键字来修饰, 包含抽象方法的类就叫做抽象类

抽象类特点

  • 抽象类和抽象方法必须用abstract关键字修饰
  • public abstract class SuperCar extends Car { //超跑的价格 public abstract void expensive (); * @Author: mao.qitian * @Date: 2018/8/11 0011 16:27 * @Description: 兰博基尼 public class Lamborghini extends SuperCar { @Override public void speed() { System .out.println( "兰博基尼速度两秒破百" ); @Override public void expensive() {

    接口(interface)

    接口使抽象的更向前迈进了一步,interface关键字修饰方法产生的是完全抽象的类,它允许创建者定义方法名,传参和返回类型,但是它没有任何方法体,只提供了形式(规则),而未提供任何具体实现。

    接口的特点

  • 接口使用interface关键字代替class修饰类,
  • 上下文角色(Context):操作我们制定策略的上下文环境,使用策略的通用调用
  • 抽象策略角色(Stragety):策略,算法的抽象,通常是一个接口
  • 策略的实现角色(ConcreteStragety):实现抽象的策略接口,具体实现这个策略
  • 实现学校教师的奖金发放,教师有属性:编号、姓名,教学总工作量,奖金
    奖金的计算方法为:
                    x*30   (当职称为教授时)
           y=       x*25   (当职称为副教授时)
                    x*20    (当职称为讲师时)
    public interface Function {                             
    //接口定义抽象方法 (Stragety)
    public double Money(double x);
    public class A implements Function  {
      //教授奖金计算
      public double Money(double x) {
      return x*30;
     public class B implements Function {
     //副教授奖金计算
     public double Money(double x) {
      return x*25;
    public class C implements Function {
      //讲师奖金计算
      public double Money(double x) {
      return x*20;
    public class myMoney {
     //上下文角色
     Function s;
     double M;//工时
     String name;//教师姓名
     String type;//教师职称
     int number;//教师编号
     public void S(double X,String N,int Num,String Type){
     this.M=X;
     this.name=N;
     this.number=Num;
     this.type=Type;
     //奖金计算方式
     public double getMoney(){
     if(type.equals("教授")) s=new A();
     if(type.equals("副教授")) s=new B();
     if(type.equals("讲师")) s=new C();
     return s.Money(M);
     myMoney f=new myMoney();
      	     Scanner sc=new Scanner(System.in);
      	     System.out.println("请输入职位:");
      	     String Type=sc.next();
      	     System.out.println("请输入姓名:");
      	     String N=sc.next();
      	     System.out.println("请输入编号:");
      	     int Num=sc.nextInt();
      	     System.out.println("请输入工时:");
      	     double X=sc.nextDouble();
      	     f.S(X, N, Num, Type);
      	     System.out.println(N+奖金为"+f.getMoney());
    
  • 类与类之间,一个类只能继承一个类,但是类可以多层继承
  • 类与接口则是实现关系,一个类可以继承一个接口,也可以继承多个接口,也可以继承一个类的同时实现多个接口
  • 接口与接口之间是继承关系,一个接口可以继承另一个接口,也可以继承多个接口
  • * @Author: mao.qitian * @Date: 2018/8/12 0012 0:22 * @Description: public interface A { public void a(); interface B { public void b(); interface C extends B,A{ //接口与接口之间继承,多继承 public void c(); class D implements A,B,C{ @Override public void a() { } @Override public void b() { } @Override public void c() { }

    抽象类和接口的区别