#### 1.接口定义的是一种行为,相当与动作的父类。比如游泳,飞行,这些动作不一定属于某个具体的类。(理解为拥有行为)
2.程序架构图,虚线空心箭头表示运用接口,实心空箭头表示继承。
3.行为的多态
public interface Swimmer{
}
public class Fish implements Swinmmer{
}
public class Shark extend Fish {
}
public class human iimplements Swinmmer{
}
Swimmer swimmer =new Shark();
Shark shark=swimmer; //出错,因为swimmer的行为对象不一定是shark
Swimmer swimmer =new Shark();
Shark shark=(shark)swimmer;//正确,w因为让swimmer扮演了shark
Swimmer swimmer =new Human();
Shark shark=(shark)swimmer;//编译出错,因为swimmer无法扮演shark进行swinmming
static void doSwim(Swinmmer swinmmer){//参数多态
//do some thing
}
4.接口注意点,在接口中的方法都是公开方法,如果没有加public abstract 那么编译程序会自动加上。使用在对方法进行操作的时候,方法前面不能默认为空(default),这样权限就缩小了,在继承中是不允许的。
接口中定义的常数叫枚举,并且需要时final类型,不能再次赋值。
import static java.lang.System.out;
public interface Action{
public static final int STOP=0;
//iinterface里只能定义public static final的枚举所以可以直接写int STOP=0;
public static final int RIGHT=1;
}
public class Game{
public static void main (String [] args){
play(Action.RIGHT);
}
pubic static void play(int action){
switch(action){
case Action.STOP:
out.print("停止播放动画");
break;
case Action.RIGHT:
out.print("播放向右动画");
break;
default:
out.println("不支持此动作");
}
}
}
#### 5.如果继承的两个接口里有相同的方法,就应该思考相同的方法里操作是否相同,如果相同那么就应该定义一个父类接口,让接口继承父类,如果不同那么名字应该不同。
6.匿名内部类
interface Fly{
void fly();
}
class Bird implements Fly{
@Override
public void setName() {
// TODO Auto-generated method stub
System.out.println("起飞");
}
}
public class Test {
public static void main(String[] args){
/*多态写法
Fly f=new Bird();
f.fly();
*/
/*实例化对象写法
Bird b=new Bird();
b.fly();
*/
//匿名内部类写法,也就是说把Bird那个k类定义到下面这片代码里
Fly f=new Fly(){
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("起飞");
}
};
f.fly();//内部类调用内部方法
}
}
匿名内部类只能取得final局部变量
5.类是如何被加载的
https://blog.csdn.net/world6/article/details/52041857
6.继承接口的抽象类就相当于接口,需要实现所有的未实现的方法,包括接口的方法。即使抽象方法以及在抽象类实现,在使用抽象类的时候也要使用匿名的方式。
package perfectlist;
interface Some{
void doSome();
}
abstract class AbstractSome implements Some{
public abstract void doSome();
public void doService() {
System.out.println("做一些服务");
}
}
public class Test{
public Test() {
// TODO Auto-generated constructor stub
AbstractSome s=new AbstractSome() {
//如果抽象类以及实现了都Some方法,那么这里{}未空
@Override
public void doSome() {
// TODO Auto-generated method stub
System.out.println("做一些事");
}
/*如果重写doService,那么将执行重写的方法
public void doService() {
System.out.println("ddd");
}
*/
};
s.doService();
}
}