接口

对象创建过程

package day0903;

 

public class Test1 {

    public static void main(String[] args) {

        new B();

        new B();

    }

}

 

class A

{

    int v1 = 1;

    static int v2 = 2;

    static{

        System.out.println("A静态块");

    }

    public A(){

        System.out.println("A构造方法");

    }

}

 

class B extends A

{

    int v3 = 3;

    static int v4 = 4;

    static{

        System.out.println("B静态块");

    }

    public B(){

        System.out.println("B构造方法");

    }

}

第一次用到AB

加载父类,父类静态变量分配内存

加载子类,子类静态变量分配内存

父类静态变量赋值运算,和静态初始化块

子类静态变量赋值运算,和静态初始化块

 

创建对象

创建父类对象,父类的非静态变量分配内存

创建子类对象,子类的非静态变量分配内存

执行父类非静态变量赋值运算

执行父类构造方法

执行子类非静态变量赋值运算

执行子类构造方法

 

接口

作用:结构设计工具,用来解耦合,隔离实现

极端的抽象类:全是抽象方法

 

关键字:interface

继承:implement

接口中只能定义:

常量

公开的抽象方法

公开的内部类、内部接口

一个类可以继承多个接口

class A implements X,Y,Z {

}



class A extends B implements X,Y,Z {

}

接口之间继承

interface A extends X,Y,Z {

}

变形金刚  

package day0904;

 

import java.util.Random;

import java.util.Scanner;

 

public class Test1 {

    public static void main(String[] args) {

 

        Transformer t = new Transformer();

        Sword s = new Sword();

        AK47 a = new AK47();

        Lyb l = new Lyb();

 

        System.out.println("按回车继续:");

        while (true)

        {

            new Scanner(System.in).nextLine();

            int r = new Random().nextInt(4);

            switch (r)

            {

                case 0:

                    t.w = null;

                    break;

                case 1:

                    t.w = s;

                    break;

                case 2:

                    t.w = a;

                    break;

                case 3:

                    t.w = l;

                    break;

            }

            t.attack();

        }

    }

}

 

package day0904;

 

public interface Weapon {

 

    int TYPE_COLE = 1;

    int TYPE_HOT = 2;

    int TYPE_NUCLEAR = 3;

 

    void kill();

 

    String getName();

 

    int getType();

}

 

package day0904;

 

public class Sword implements Weapon {

 

 

    @Override

    public void kill() {

        System.out.println("使用"+this.getName());

    }

 

    @Override

    public String getName() {

        return "大宝剑";

    }

 

    @Override

    public int getType() {

        return Weapon.TYPE_COLE;

    }

}

 

package day0904;

 

public class AK47 implements Weapon {

    @Override

    public void kill() {

        System.out.println("使用"+this.getName());

    }

 

    @Override

    public String getName() {

        return "AK47";

    }

 

    @Override

    public int getType() {

        return Weapon.TYPE_HOT;

    }

}

 

package day0904;

 

public class Lyb implements Weapon {

    @Override

    public void kill() {

        System.out.println("使用"+this.getName());

    }

 

    @Override

    public String getName() {

        return "狼牙棒";

    }

 

    @Override

    public int getType() {

        return Weapon.TYPE_NUCLEAR;

    }

}

 

package day0904;

 

public class Transformer {

    Weapon w;

 

    public void attack()

    {

        if(w == null)

        {

            System.out.println("用牙咬");

            return;

        }

        w.kill();

    }

}