在java中提供了两种方法来实现OOP的抽象,抽象类和接口。
很多时候我们需要在接口和抽象类中做出选择。
一. 接口
- 接口的理解:我觉得接口就是一个特殊的类,它主要是为了解决java不可以实现多继承的特性,在开发过程中接口更多的是用在标准的定义。而且接口中的方法都是没有方法体的,都是一些抽象方法。
- 接口的要求:
1、接口中的属性默认为public static final类型的。
2、接口中的方法默认为public abstract类型的。
3、接口类只能用public修饰。
4、接口没有构造方法,也不可以实例化。
5、接口可以继承一个或者多个接口,但是不可以继承类。
6、实现接口需要实现接口中的所有方法。 - Java中接口代码代码示例
public interface InterfaceTest {
public static final String URL = "localhost:8080";
void Test();
public abstract int Show();
}
二. 抽象类
- 抽象类的理解:
1、抽象类和类一样,都是可以用来继承的
2、类可以有的成分,抽象类都可以拥有【包括构造方法、static静态修饰成分等】 - 抽象类的条件:
- 抽象类是用abstract来修饰
- 抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类
- 抽象类不可以被实例化。
- 抽象类可以有构造器。
- 抽象类中方法理论上可以使用任何修饰符
- 抽象类中可以包含static方法
- 抽象类可以implements接口,并且完全可以不实现接口的方法,因为抽象本身就是允许抽象方法的!抽象类,也可以继承抽象类,并且也可以不实现所继承父类的抽象方法,而交由下层的具体实现类实现。
- 抽象类代码示例
public abstract class AbstrcTest {
public int flag = 1;
public AbstrcTest(){
System.out.println("构造方法");
}
public static void test(){
System.out.println("static method test");
}
public void print(){
System.out.println(" 普通 方法");
}
public abstract void aMethod();
}
三.Java8中的新特性
1.在接口中可以添加使用default关键字修饰的非抽象方法.
2.接口中可以声明静态方法,并且可以实现
public interface InterfaceTest {
default void df(){
System.out.println("可以实现default方法");
st();
}
static void st(){
System.out.println("可以实现static方法");
}
}
public class Testss implements InterfaceTest{
public static void main(String args[]){
Testss testss = new Testss();
testss.df();
}
}
接口的默认方法可以调用静态方法;
然后实现接口的字类也可以通多实例化对象来调用默认方法。