创建抽象类需要用到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 {
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() { }
抽象类和接口的区别