Can we reduce the amount of code further?
Yes. It is possible to completely omit the requirement to create an implementation of a trait if that trait contains a default method:
trait MyTrait { fn test_code(&self) -> bool; fn self_test_code(&self) -> bool { self.test_code() } }
test_code
is just the stub which requires an implementation. The self_test_code
function doesn't need an implementation as it has a default method already.
Can the default method be overridden?
It can.
Note
The code for this section is in 09/override_default_method
.
Let's start the code off by defining a trait
. This has a default method for is_not_done
. We will still need to implement is_done
though, which we do for the UseFirstTime
struct:
struct UseFirstTime; impl MyTrait for UseFirstTime { fn is_done(&self) -> bool { println!("UseFirstTime.is_done"); true } }
We next want to override the default method for is_not_done
. Again, we create an empty struct
and write both the implementations...