接口
抽象类,也是类,所以它只有单继承。
1)abstract
修饰符可以用来修饰方法 也可以修饰类。如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类;
2)抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类;
3)抽象类不能使用 new关键字来创建对象,它只是被类继承的,但是可以有普通方法;
4)抽象方法,只有方法的声明没有方法的实现;它只是被子类实现的;
5)子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类。
package com.g.abstraction;
public abstract class Action {
/* abstract 修饰方法。抽象方法:只有方法名,没有方法的实现
它就是一个约束,由继承类实现该方法*/
public abstract void say();
/*
1.抽象方法:抽象方法只能在抽象类中存在。
2.抽象类:
a.不能 new这个抽象类,只能由子类去实现;
b.抽象类中可以有 普通方法。
3.抽象类的作用:简化开发,提高开发效率
*/
}
抽象类也有构造器:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.g.abstraction;
public abstract class Say {
public Say() {
}
}
class
是声明类的关键字 ;abstract
是修饰类的关键字;interface
是声明接口的关键字;
接口不是类,它可以单继承 也可以多继承。
接口的作用:有约束和实现分离的作用,达到面向接口编程的程度。
普通类:只有具体实现;
抽象类:具体实现和规范(抽象方法)都有;
接口:只有规范专业的约束(内部只能写抽象方法)。
1)接口就是规范,他定义的是一组规则,体现了现实生活中的“如果你是…则必须能…”的思想;
2)接口的本质:是契约。就像法律,制定好后就必须遵守。
3)面向对象(Object Oriented,缩写为OO)的精髓:是对 对象的抽象,最能体现这一点的就接口。讨论设计模式时,都是针对具备了抽象能力的语言(如C++、Java、C#等)的原因,是因为设计模式所研究的就是如何合理的去抽象。
package com.h.interfaces;
// interface 接口_1
public interface UserService {
/*2.可以定义常量,默认是:public static final
实际使用中,一般不在这里定义*/
int AGE= 18;
/* 1.接口中所有的定义都是抽象的,
默认是:public abstract*/
public abstract void add(String name);
void deleter();
}
package com.h.interfaces;
// 接口_2
public interface TimeService {
void time();
}
package com.h.interfaces;
/**
* 1.抽象类通过 extends 继承父类(单继承);
* 2.类通过 implements实现接口(可以是多个接口);
* 3.实现了接口的类,就需要重写接口中的方法
*/
public class UserServiceImpl implements UserService,TimeService {
@Override
public void add(String name) {}
@Override
public void deleter() {}
@Override
public void time() {}
}
接口作用总结:
- 接口是约束;
- 接口定义了一些方法,可以让不同的人实现;
- 接口中的方法默认是 public static 修饰;
- 接口中的常量默认是 public static final 修饰;
- 接口不能被实例化,它没有构造器(构造方法),抽象类是有构造器的;
- 用 implement 可以实现多个接口;
- 实现类必须要重写接口中的方法。