一、什么是抽象?抽取相同的、类似的东西出来算法
二、抽象方法:只有方法声明,而没有方法实现的方法,就是抽象方法网络
在各个子类中,对于某个方法都有本身不一样的实现,因此实现各不相同,没法抽取,只能抽取方法的声明上来,ide
在父类中,方法就只有方法声明没有方法体。就是抽象方法。学习
定义格式:this
1、没有方法实现,连大括号都没有,直接在方法声明后面加上一个分号,表示方法定义结束spa
2、为了将方法标记为抽象方法,须要在方法前面加上一个abstract关键字3d
三、抽象类:能够定义抽象方法的类code
定义格式: abstract 类名{ }对象
四、抽象类的特色 blog
一、抽象类和抽象方法都须要使用abstract关键字修饰
抽象类:abstract class {}
抽象方法:public abstract void test();
二、抽象类和抽象方法的关系:
抽象方法所在的类必须是抽象类
抽象类中未必必定都定义抽象方法,抽象类中未必存在抽象方法
三、抽象类的实例化(抽象类如何建立对象)
抽象类不能直接实例化
定义抽象类的子类,由子类建立对象,调用方法
四、抽象类子类的前途
在子类中,将父类全部的抽象方法所有重写(实现),子类就成了一个普通类,就能够建立对象
在子类中,没有将父类中全部的抽象方法所有实现,子类就仍是一个抽象类,还须要使用abstract关键字 修饰子类。
五、抽象类成员的特色
一、成员变量:能够定义变量、也能够定义常量,但不能被抽象
二、构造方法:虽然本类没法建立对象,可是抽象类必定有子类,子类会访问父类的抽象方法。
是否有构造方法,不取决因而否能够建立对象,而是取决因而否能够定义成员变量。
若是能够定义成员变量,那么就须要初始化成员变量,就是构造方法来完成的。
三、成员方法:既能够有抽象方法,也能够存在具体方法。
既然是抽象方法,必须让子类强制重写,若是子类没有重写,子类仍是抽象类
/* * 模板方法模式:定义一个操做中的算法的骨架,将一些可变部分的实现延迟到子类中。 * 模板算法模式使子类能够不改变一个算法的结构便可从新定义该算法的某些特定步骤。 */ public class Demo02 { public static void main(String[] args) { UserManager um = new UserManager(); um.action("admin", "add"); } } abstract class BaseManager{ public void action(String name,String method) { if("admin".equals(name)) { test(method); }else { System.out.println("你没有操做权限,请联系管理"); } } public abstract void test(String method); } class UserManager extends BaseManager{ public void test(String method) { if("add".equals(method)) { System.out.println("执行了添加操做"); }else if("del".equals(method)) { System.out.println("执行了删除操做"); } } }
一、接口的定义 interface
格式 interface 接口名{ }
二、接口中只能够声明抽象方法
三、类能够去实现接口:implements
实现:接口中只定义方法名称,在类中真正实现
四、接口的实例化:不能直接实例化
定义类,实现接口,建立子类对象,调用方法
五、接口中成员的特色
一、成员变量:只能是常量 默认public static final
二、构造方法 接口没有构造方法
三、成员方法 只能是抽象方法,默认public abstract
六、类与类、类与接口、接口与接口的关系
类与类:单继承 多层继承
类与接口:类能够实现多个接口,若是没有实现,则是一个抽象类,它的子类必须实现,不然仍是抽象类
接口与接口:能够单继承、也能够多继承、也能够多层继承
类和接口的区别:
抽象类:定义物体具备的固定属性和行为
接口:定义物体经过学习,扩展出来的行为
/* * 策略模式:定义一系列算法,将算法封装起来(隐藏在接口以后),并能够相互替换使用 * 策略模式让算法独立于使用它的客户应用而独立变化 * */ public class Demo01 { public static void main(String[] args) { // TODO Auto-generated method stub BaseService us = new UserSave(); us.setIsave(new NetSave()); us.add("user>>>"); } } interface Isave{ public abstract void save(String data); } class FileSave implements Isave{ @Override public void save(String data) { System.out.println("存到文件中"+data); } } class NetSave implements Isave{ @Override public void save(String data) { System.out.println("存到网络中"+data); } } abstract class BaseService{ private Isave isave; public void setIsave(Isave isave) { this.isave = isave; } public void add(String data) { System.out.println("检查数据合法性"); isave.save(data); System.out.println("数据保存完毕"); } } class UserSave extends BaseService{ }
---恢复内容结束---