Tất cả ba hình thức là hợp lệ và có hiệu lực Bđược coi là loại thistrong lớp A.
Hai biến thể đầu tiên
trait A { self: B => ... }
trait A { foo: B => ... }
giới thiệu self(tương ứng, foo) như một bí danh cho thisđặc điểm A. Điều này rất hữu ích để truy cập thistài liệu tham khảo từ một lớp bên trong. Tức là sau đó bạn có thể sử dụng selfthay vì A.thiskhi truy cập thistham chiếu của đặc điểm Atừ một lớp được lồng trong nó. Thí dụ:
class MyFrame extends JFrame { frame =>
getContentPane().add( new JButton( "Hide" ) {
addActionListener( new ActionListener {
def actionPerformed( e: ActionEvent ) {
// this.setVisible( false ) --> shadowed by JButton!
frame.setVisible( false )
}
})
})
}
Biến thể thứ ba,
trait A { this: B => ... }
không giới thiệu một bí danh cho this; nó chỉ đặt kiểu tự.