Java学习:第九章接口

    抽象方法和抽象类

★    接口

    策略设计模式和适配器设计模式

抽象类和抽象方法:

1、   抽象方法

     使用关键字 abstract修饰的方法称为抽象方法, 仅有方法声明没有方法体。

2、   抽象类

包含抽象方法的类称为抽象类,必须也用abstract 关键字声明。abstract 关键字声明的类一定是抽象类(无论类内是否有抽象函数)

2.     抽象类的性质

Ⅰ   不能创建抽象类的对象,否则编译器报错。但是可以创建抽象类的引用。

    

Ⅱ   如果继承一个抽象类,没有为基类中的所有抽象方法提供方法定义,那么这个导出类也是抽象类,必须也用abstract 关键字声明。

3.   抽象类的用途

★  抽象类为它的所有子类创建了一个通用接口,不同的子类使用不同的方式实现此接口

抽象类和抽象方法的典例: 

enum Note {
    CarmeloAnthony, KobeBryant
}


abstract class Instrument { // 抽象类
    public abstract void play(Note n); // 抽象方法

    public String what() {
        return "Instrument";
    }

    public abstract void adjust();
} //  抽象类中可以包含非抽象方法,抽象函数不能是static和private

class Wind extends Instrument {
    public void play(Note n) {
        System.out.println("Wind.play( ) " + n);
    }

    public String what() {
        System.out.println("here!");
        return "Wind";
    }

    public void adjust() {
    }
}//子类实现抽象方法与覆盖类似,可以使用协变返回类型,访问权限可以相等或放松。


public class Main {
    public static void main(String[] args) {
        Instrument fun = new Wind();
        fun.what();
        fun.play(Note.CarmeloAnthony);
    }
}

 

  接口

1、   接口(Interface的概念

     Java中,用interface关键字来创建一个完全抽象的类

     区别:抽象类与接口

2、   接口的创建

     接口是一种特殊的抽象类,但在创建时使用interface关键字,接口内的方法不用加abstract关键字.

3、默认访问权限控制:

  抽象类:缺省(包访问权限控制)

  接口:public

接口的性质:

1只有抽象方法的声明,不能有具体的方法实现(不能有初始化语句块)

2interface中所有方法的访问权限都是public(缺省)否则编译器报错

3)接口也可以包含域,这些域隐式为publicstaticfinal必须进行指定初始化。

接口得的实现:

interface MyInterface {
    // 常量
    public static final double PI = 3.14159;

    // 抽象方法
    public double calculateArea(double radius);

    // 默认方法
    public default void printMessage(String message) {
        System.out.println("Message: " + message);
    }

    // 静态方法
    public static int add(int a, int b) {
        return a + b;
    }
}

 public class exp1 implements MyInterface {
    @Override
    public double calculateArea(double radius) {
        return PI * radius * radius;
    }

    @Override
    public void printMessage(String message) {
        System.out.println("Overridden message: " + message);
    }

    public static void main(String[] args) {
        exp1 obj = new exp1();
        System.out.println("Area: " + obj.calculateArea(5.0));
        obj.printMessage("Hello, world!");
        System.out.println("Sum: " + MyInterface.add(10, 20));
    }
}

 接口中的域:

     接口中的域隐式是staticfinal,可以被非常量表达式初始化。

     Java  SE5以后的版本提供了功能更加

         强大和灵活的enum关键字,因此通过

         接口来群组常量已经没有什么意义

嵌套接口:

1、  接口嵌套在类中

     class  A

         {   interface  B

             {  void  f();}     

              .....

2、  接口嵌套在其它接口中

     interface  E

         {   interface  G

             {  void  f();}  

              .....

  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值