返回Java 中的......登陆

Java 中的抽象类及接口

阿神2016-11-07 15:13:25364

抽象类使用 abstract 关键字修饰,该类即为抽象类。

抽象类的作用:

1、某些情况下,父类约束子类必须包含哪些方法,但不知道子类如何去实现这些方法。

2、可以从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,避免子类设计的随意性。

抽象类的使用规则:

1、使用 abstract 定义抽象对象;
2、abstract 定义抽象方法,只有声明,不需要实现;
3、包含抽象方法的类是抽象类;
4、抽象类中可以包含普通的方法,也可以没有抽象方法;
5、抽象类不能直接创建,可以定义引用变量,指向子类对象;

首先先创建一个抽象类:

1

2

3

4

public abstract class Telephone {    //打电话

    public abstract void call();    //发短信

    public abstract void sendMessage();

}

接着分别创建两个子类继承该父类,子类必须包含父类所声明的抽象方法,否则会报错:

1

2

3

4

5

6

7

8

9

10

11

public class CellPhone extends Telephone{

 

    public void call(){

        System.out.println("通过键盘来打电话");

    }

 

    public void sendMessage()

    {

        System.out.println("通过键盘来发短信");

    }

}

1

2

3

4

5

6

7

public class SmartPhone extends Telephone{    public void call(){

        System.out.println("通过语音来打电话");

    }    public void sendMessage()

    {

        System.out.println("通过语音来发短信");

    }

}

再创建一个测试类:

1

2

3

4

5

6

7

8

9

public class Test {    public static void main(String[] args) {        //普通手机

        Telephone cellphone = new CellPhone();

        cellphone.call(); //通过键盘来打电话

        cellphone.sendMessage(); //通过键盘来发短信        //智能手机

        Telephone smartphone = new SmartPhone();

        smartphone.call(); //通过语音来打电话

        smartphone.sendMessage(); //通过语音来发短信

    }

}

 Java中的接口被用来继承,必为abstract,一般为public,且内部为常量和抽象方法,一个类可以实现多个接口。

首先创建一个新的接口:

1

2

3

public interface IPlayGame {

    public String todo = "可以玩游戏";

    public void playGame();

将SmartPhone类改写为:

1

2

3

4

5

6

7

8

9

10

11

public class SmartPhone extends Telephone implements IPlayGame{    protected String name = "智能手机";    public void call(){

        System.out.println("通过语音来打电话");

    }    public void sendMessage()

    {

        System.out.println("通过语音来发短信");

    }

 

    @Override    public void playGame() {

        System.out.println(name + todo);

    }

}

实例化并输出:

1

2

IPlayGame sp = new SmartPhone();

sp.playGame(); //智能手机可以玩游戏

在接口在使用过程当中,还经常与匿名内部类配合使用,匿名内部类就是没有名字的内部类,多用于关注实现而不关注实现类的名称。

1

2

3

4

5

6

7

8

//第一种实现方法IPlayGame ip1 = new IPlayGame() {

      @Override      public void playGame() {

           System.out.println("匿名内部类的方法实现接口" + todo); //匿名内部类的方法实现接口可以玩游戏      }

};

ip1.playGame(); //调用接口方法//第二种实现方法new IPlayGame() {

      @Override      public void playGame() {

            System.out.println("匿名内部类的方法实现接口" + todo); //匿名内部类的方法实现接口可以玩游戏      }

}.playGame();

最新手记推荐

• 用composer安装thinkphp框架的步骤• 省市区接口说明• 用thinkphp,后台新增栏目• 管理员添加编辑删除• 管理员添加编辑删除

全部回复(0)我要回复

暂无评论~
  • 取消回复发送