抽象类、接口和匿名类

抽象类 abstract

抽象方法:如果一个方法是不完整的,即没有方法体。那么,它就是抽象方法。

抽象类:用 abstract 关键字修饰的类就是抽象类。

  • 包含抽象方法的类,一定是抽象类;但抽象类的方法不一定是抽象方法。
  • 抽象类不能实例化,即不能创建对象。
  • 抽象类可以被子类继承,也是采用关键字 extends
  • 抽象类中如果有抽象方法,子类必须重写抽象方法。因此 abstract 不能和 final 同时使用。
// 抽象类
abstract class Abs {

    // 抽象方法
    public abstract void test(int a);
}

class ChildAbs extends Abs {
    // 重写抽象方法
    public void test(int a) {
        // todo
    }
}

接口 interface

接口:可以理解为一套规则,或基本的规范(契约)。

  • 接口的属性必须是固定值,且不能修改,属性应该是静态的。
  • 接口的方法和属性必须是公共的,方法应该是抽象的,即没有方法体。接口中允许存在默认方法。
  • 接口和类是两个层面的概念。
  • 接口负责制定规范,接口之间可以继承 extends ,属于多继承。
  • 而类需要遵循接口规范,即类实现接口。采用关键字 implements。一个类可以同时实现多个接口。
  • 接口不能直接实例化。
interface USBInterface {}

// 接口继承
interface USBSupply extends USBInterface {
    public void powerSupply();
}

interface USBReceive extends USBInterface {
    public void powerReceive();
}

// 类实现接口
// Computer 是 USBSupply 的实现
class Computer implements USBSupply {
    // 电脑中提供了两个接口
    public USBReceive usb1;
    public USBReceive usb2;

    public void powerSupply() {
        System.out.println("电脑提供能源");
        usb1.powerReceive();  // 调用接口的实现的方法
        usb2.powerReceive();
    }
}

// 类实现接口
// Light 是 USBReceive 的实现
class Light implements USBReceive {
    public void powerReceive() {
        System.out.println("电灯接收能源");
    }
}
// 接口类型的变量,被它的实现类的对象赋值时,可以调用实现类的方法。
Computer computer = new Computer();
Light l1 = new Light();
USBReceive l2 = new Light();  // 也可以这样写
computer.usb1 = l1;
computer.usb2 = l2;
computer.powerSupply();

匿名类

  • 如果一个抽象类的子类的类名不重要,就可以省去子类名和继承操作,好像在 new 抽象类一样。这是基于抽象类的匿名子类的实例化方式
  • 如果一个接口的实现的类名不重要,就可以省去类名和实现操作,好像在 new 接口一样。这是基于接口的匿名实现类的实例化方式
// 抽象类
abstract class Per {
    public abstract String name();
}

class Me {
    public static void sayHello(Per p) {
        System.out.println("Hello " + p.name());
    }
}

// 接口
interface Fly {
    public void fy();
}

基于抽象类的匿名子类

Me.sayHello(new Per() {
    @Override
    public String name() {
        return "jack";
    }
});

基于接口的匿名实现类

new Fly() {
    // 重写接口的方法
    public void fy() {
        System.out.println("test fy");
    }
}.fy();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值