这里要看这个类是否是非抽象的,如果是普通的类,必须去实现接口里所有的方法,如果是抽象类类,则可以不去实现,
在Java中抽象类就是使用abstract关键字修饰的一种特殊的类,抽象类可以不去实现接口的抽象方法,可以由继承这个抽象类的子类去实现。
在这里首先定义一个接口,接口里面定义一些抽象方法 public interface TestInterface { void show(); }
非抽象类必须实现接口里的抽象方法,否则编译报错 public class TestStr implements TestInterface{ @Override public void show() { } } 抽象类实现接口可以不去实现接口里抽象方法,也可以实现 public abstract class TestAbstract implements TestInterface{ }
可以由继承该抽象方法的子类去实现
public class TestChildClass extends TestAbstract {
@Override
public void show() {
}
}
“Java中,一个类实现了某接口,则必须实现该接口中的所有方法么?”这句话其实是不准确的,因为我们还没有考虑到抽象类。
抽象类实现某个接口,可以不实现所有接口的方法,可以由它的子类实现。而普通类即非抽象类则必须实现接口里的全部方法。
同样地,再来讲述一下接口:
1 接口的设计解决了java只能单继承的缺点,可以实现多个接口来实现java的多继承。
2 实现某个接口必须覆写其中的所有方法,当然也可以是一个空的实现(方法体为空没有任何作用),但是这个类必须是非抽象类,抽象类如上文。
抽象类实现接口的意义,可以选择实现某个方法,或者不去实现某个方法,减少代码冗余性
我打个比方,比如A是一个借口,里面有a,b,c,d4个抽象方法,而这时候,我们想让某些方法内容已实现,而某些方法放给调用者实现,这时候就出现了抽象类,抽象类可以选择性实现接口的方法,最直观的例子是List,不论是LinkedList,还是ArrayList,都继承了AbstractList,而AbstractList又实现了List接口,为什么要这样呢?因为ArrayList和LinkedList有些东西是一样的,没有必要重复2次,所以就有了AbstractList作为中间量!
其本质就是为了高复用性,减少代码重复度,一个高质量代码,其必然考虑,一切封装出去,相同的代码绝对不能重复出现在两个地方,否则就会产生代码冗余.
至于解耦合等代码规范,和这个问题不搭边,所以不多说