Why does protocol allow subclass to ping uninheritable initializer

at a glance, extremely unintuitive

protocol EKEventProtocol {
    init(eventStore: EKEventStore)
}

extension EKEvent: EKEventProtocol {
    override open var hasAttendees: Bool {
        return false
    }
}

class FakeEKEvent: EKEvent {
    override open var hasAttendees: Bool {
        return true
    }
}
public class EventTests: XCTestCase {
    func test_FakeEKEvent() {
        var fakey: FakeEKEvent = FakeEKEvent(eventStore: .init())
        fakey.title = "robots forever based freestyle"
        XCTAssertTrue(fakey.title == "robots forever based freestyle", "title mismatch")
        XCTAssertTrue(fakey.hasAttendees, "doesnt have attendee")
        var faker: EKEvent = EKEvent(eventStore: .init())
        faker.title = "love ya dru based freestyle"
        XCTAssertTrue(faker.title == "love ya dru based freestyle", "title mismatch")
        XCTAssertFalse(faker.hasAttendees, "has attendee")
    }
}

It says it's open I must be missing something though. Anyone have any ideas for this one? I guess I can hit the initializer either way though haha :)



Anyone know if there are more fun ones like this?