E069: Cannot Have Same Name As

This error is emitted when a member has the same name as another definition in a way that creates an illegal conflict.

This typically happens when:

  • A member tries to override a class definition (class definitions cannot be overridden)
  • A member in a class has the same name as a member defined in a self-type reference

Example

class Outer:
  class Inner

class Child extends Outer:
  override class Inner

Error

-- [E069] Naming Error: example.scala:5:17 -------------------------------------
5 |  override class Inner
  |                 ^
  |class Inner cannot have the same name as class Inner in class Outer -- class definitions cannot be overridden

Solution

// Use an abstract type member with optional interface
abstract class Outer:
  trait Interface
  type Inner <: Interface

class Child extends Outer:
  class Inner extends Interface