Don't extend something which should be an interface. (#3862)

Don't extend something which should (and will) be an interface.

Update a test expectation:

Analyzer has changed an info to a warning.
Test was looking for "info -" in output.

The info category is quickly going away (q.v., https://github.com/dart-lang/sdk/issues/50796),
so the test should probably be checking for warnings now.
diff --git a/lib/src/third_party/tar/lib/src/writer.dart b/lib/src/third_party/tar/lib/src/writer.dart
index 5ff92b9..13dbdf3 100644
--- a/lib/src/third_party/tar/lib/src/writer.dart
+++ b/lib/src/third_party/tar/lib/src/writer.dart
@@ -152,7 +152,7 @@
   gnuLongName,
 }
 
-class _WritingSink extends StreamSink<TarEntry> {
+class _WritingSink implements StreamSink<TarEntry> {
   final StreamSink<List<int>> _output;
   final _SynchronousTarSink _synchronousWriter;
   bool _closed = false;
@@ -269,7 +269,7 @@
   }
 }
 
-class _SynchronousTarSink extends Sink<SynchronousTarEntry> {
+class _SynchronousTarSink implements Sink<SynchronousTarEntry> {
   final OutputFormat _format;
   final Sink<List<int>> _output;
 
diff --git a/test/validator/analyze_test.dart b/test/validator/analyze_test.dart
index 1ce8b4f..5a1e8b4 100644
--- a/test/validator/analyze_test.dart
+++ b/test/validator/analyze_test.dart
@@ -116,7 +116,7 @@
     );
   });
 
-  test('should warn if package contains infos in test folder', () async {
+  test('should warn if package contains warnings in test folder', () async {
     await d.dir(appPath, [
       d.validPubspec(),
       d.file('LICENSE', 'Eh, do what you want.'),
@@ -136,7 +136,7 @@
       error: allOf([
         contains('`dart analyze` found the following issue(s):'),
         contains('Analyzing lib, test, pubspec.yaml...'),
-        contains('info -'),
+        contains('warning -'),
         contains("The value of the local variable 'a' isn't used"),
         contains('Package has 1 warning.')
       ]),