抽象与接口

抽象类:

如果一个类中,有方法没有方法体,那么这个方法就是抽象方法
即,方法只有声明,没有方法体
如果一个类中,只要有抽象方法,那么这个类就是抽象类
说明这个类不具体

抽象类也是类,有类就可以放属性和方法(带方法体,不带方法体)
抽象类中可以放置属性,属性使用来存储数据的
抽象类中可以放置有方法体的方法,此方法能够完成某个功能
抽象类中可以放置没有方法体的方法,这个方法就是抽象方法
只要类中有一个抽象方法,这个类就是抽象类

抽象类是不能实例化对象,因为抽象类有抽象方法
程序员不能实例化,并不等于jvm不能实例化对象

抽象类只能当父类,
如果在子类中把所有的抽象方法都补上方法体,
那么这个子类就不是抽象类了,就可以实例化对象了
同时也可以调用方法了.
如果在子类中没有把所有的抽象方法给补上方法体
那么这个类还是抽象类,满足抽象类的用法.

抽象方法不能用static ,final,private修饰

抽象类的应用场景:
  • 在父类中有一些方法没有方法体,或者没有必要给上方法体
    此时把方法做成抽象方法,那么此类就变成抽象类

    比如:

    Shap形状类中有一个方法叫做draw()绘制图形的方法
    Triangle继承自Shap类,draw()方法就可以绘制三角形
    Retangle继承自Shap类,draw()方法就可以绘制矩形

    Shap类中的draw方法就应该是抽象方法,因为Shap
    不代表具体形状.所以没办法复制

把抽象类抽象到极致,所有的方法都没有方法体,
此情况不建议做成类,建议做成接口

接口:

接口中的所有的方法都是抽象方法,即没有方法体,接口方法
接口中可以放属性,但属性默认是public static final的
接口不适合存储数据,更适合做功能
而类适合存储数据

接口的特点:

  • 接口中的方法和属性都是公有
  • 接口是不能实例化对象的
  • 必须由子类实现接口,且子类可以实现多个接口,解决java的单继承问题,多个接口用逗号间隔
  • 子类实现接口的关键字implements, 直到子类把接口中的所有的方法都实现了,才可以实例化子类对象
    否则子类就是抽象类
  • 接口中可以有属性,但默认的是public static final,不适合存储数据
  • 接口中可以有方法,方法必须都是没有方法体的,且是公有,public可以省略
  • 定义接口的关键字interface
  • 接口不能实现接口,但接口可以继承接口,而且还可以多继承, 即接口extends接口1,接口2…
  • 接口中没有构造方法
结论: 接口更适合放置方法,而不适合存数据 类适合存数据,抽象类和普通类 接口就是对子类功能的规范,子类必须全部实现接口中的方法

接口的案例:

  Person接口:{
      	study()
    	eat();
  }

abstract CommonPerson类 实现了Person接口

    public abstract  CommonPerson{
      String name;
    int age
    abstract study();
    abstract eat();
    sleep()
   }

Student类 继承自CommonPerson

   public class Student{
   		String stuNo;
      //重写:是学生的学习方式和吃的方式
	    study(){}
	    eat(){}
	  //自己的方法
	  homework(){}
     }

Teacher类 继承自CommonPerson

 public class Student{
	 //重写:是老师的学习方式和吃的方式
	  study(){}
	  eat(){}
	 //自己的方法
	  tech(){}
    }

为什么要使用接口?

  • 用接口可以限定子类,必须实现接口规定的所有方法
    以保证项目功能的完整性
  • 用接口实现多态,有接口就一定有继承,而多态是以继承作为基础的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值