抽象类

抽象类定义

只约定类所具有的抽象行为,没有具体实现相应行为。

语法格式

abstract class 类名{
常量;
变量;
构造();
访问修饰符abstract 返回类型 方法名;//抽象方法
普通方法;
静态方法();
}

应用场景

1.不适合创建对象。

2.有些功能没有必要实现,有不同的子类实现。

3.每次使用的都是子类的对象。

4.为所有的子类提供了一个模板,所有的子类都是在此模板的基础之上添加和修改完善功能而创建出来的。

注意事项

1.不能创建对象。

2.必须由子类继承使用。

3.普通的子类必须实现抽象类中的所有抽象方法。(抽象子类除外)

4.构造方法不能是抽象的。

5.abstract不能和private、final、static一起使用。

6.抽象类中的抽象方法不是必须的,可以写,可以不写。

 abstract class TrafficTool1{
int count;
public abstract void run() ;//抽象方法
}
class Car2 extends TrafficTool1{
@Override
public void run() {
System.out.println("汽车在公路上行驶");
}
}
class Tube2 extends TrafficTool1{
public void run() {
System.out.println("地铁在 地下行驶");
}
}
public class TestTrafficTool1 {
public static void main(String[] args) {
Car2 c2 = new Car2();
c2.run();
Tube2 t2 = new Tube2();
t2.run(); } }

接口

定义接口

提供了一组规则。

访问修饰符 interface 接口名{//所有成员都是public
常量;//public static final
抽象方法;//public abstract
默认方法;//public default 类型 名(){实现}
静态方法;//public static 类型 名(){实现}
//不能被 实现类继承
//不能被 子接口继承
静态内部类型;//(public static 内部类,内部接口,内部枚举)
}

接口特点

1.接口不能创建对象。

2.由实现类来实现功能。

3.普通的实现类,必须实现接口中的所有抽象方法。(抽象实现类除外)

4.实现类可以实现多个接口的功能。

5.接口之间可以继承,而且可以多继承。

接口注意事项

1.静态方法不能被继承。静态方法用 接口名.静态方法名调用

2.实现多个接口方法名相同的处理

接口在开发中,提供了一组规则和规范,一旦发布了,就不要更改了。

解决问题:用default

 interface WebBank{
void webService();//网上支付功能
//public abstract void webService();
default void fd() {}
}
//实现类
class Jingdong implements WebBank{
@Override
public void webService() {
System.out.println("京东实现了支付功能");
}
public void show() {}
}
class Taobao implements WebBank{
public void webService() {
System.out.println("淘宝实现了支付功能");
}
}
public class TestWebBank {
public static void main(String[] args) {
WebBank web = new Jingdong();
web.webService();
web.fd();
// web.show();//屏蔽
/* Jingdong jd = new Jingdong();
jd.webService();
Taobao tb = new Taobao();
tb.webService();*/ } }

接口和抽象类的异同

相同

1.都不能创建对象

2.都需要用子类或实现类来继承或实现。

3.都可以包含抽象方法。

4.普通的子类或实现类需要实现所有的抽象方法(抽象的除外)。

不同

1.抽象类是个类,是个模板类,为子类提供模板,是个半成品。

2.接口是提供了一个功能,是一个规范。

3.抽象类 子类是单一继承。

4.实现类 可以实现多个接口。

5.接口之间可以多继承。

最新文章

  1. http服务的安装与配置
  2. 6.Linux的文件权限与目录配置
  3. onscroll事件的浏览器支持
  4. 拥抱高效、拥抱 Bugtags 之来自用户的声音
  5. JavaScript相关知识
  6. RichLabel基于Cocos2dx+Lua v3.x
  7. 转载.Net MVC中Html.RenderPartial和Html.RenderAction 的应用与区别
  8. Compiling aSmack
  9. JS获取图片上传地址
  10. (转)iOS Wow体验 - 第四章 - 为应用的上下文环境而设计
  11. C#下使用GDAL
  12. PHP+Apache+Mysql 配置流程【配置之后才能正常使用】
  13. iStat for mac
  14. 【ASP.NET MVC 牛刀小试】 URL Route
  15. 【.net 深呼吸】导出 Office 文档中的图片
  16. cordova封装h5为app,cookie不可用解决方法
  17. Logback中如何自定义灵活的日志过滤规则
  18. Vue:(二)基础常用语法
  19. linux下nginx编译安装
  20. vs中更改项目名称注意事项

热门文章

  1. EnyimMemcached(64位)使用实例
  2. git fork后提交pull request到原作者,别人的pull request我们要怎样merge融合
  3. Golang beego ORM + CRUP 操作详解
  4. CodeForces765C
  5. linux基础学习之软件安装以及常用命令(三)
  6. AE三维点击查询(3D Identify)的实现(转)
  7. 慕课网 jQuery 笔记
  8. C#+SharpMap的相关代码
  9. runloop timer
  10. vue.js高仿饿了么(前期整理)