文章目录
OOP
抽象类 abstract
- 抽象类中既可以定义抽象方法(
就是没有方法体
),也可以定义普通方法 - 不能被实例化,如果子类没有将抽象方法完全实现,子类应为抽象类
/**
* 抽象类命名建议以Abstract 或Base开头
*/
public abstract class AbstractTest {
int a=0;
/**
* 抽象方法,
*/
public abstract void abstractMethod();
public void noAbstractMethod(){
System.out.println("not abstract");
}
}
接口 Interface
public interface InterfaceTest {
/**
* 1.接口内变量自动为常量,编译时会自动加上 public static final修饰符
*/
String NAME ="Interface";
/**
* 2.接口可以定义抽象方法,没有使用 private、default 或者 static 关键字修饰的方法是隐式抽象的,在编译的时候会自动加上 public abstract 修饰符
*/
void abstractMethod();
/**
* 3.Java8开始,接口可以定义静态方法,需要有方法体
*/
static void staticMethod(){
System.out.println("静态方法需要通过接口名来调用");
}
/**
* 4.Java8开始,接口可以定义default方法
*/
default void defaultMethod(){
System.out.println("默认方法需要有方法体");
}
}
注意:
1.通常情况下,为了遵循接口契约,实现接口的类应完整地实现接口中所有的
抽象方法;
2.同样,如果抽象类的子类没有实现所有的抽象方法,需要定义子类为抽象类;
3. 或者,可以将方法体置空来全部实现
接口的作用:
- Java支持单继承,通过实现多个接口可以达到获得多种行为特征,相当于实现了多继承
- 多态不仅可以通过继承实现,也可以通过接口实现
接口仅定义了方法签名,不可以实例化。但是可以将实现接口的子类赋值给接口类型引用
// 接口 Shape
public interface Shape {
String name();
}
//实现
public class Circle implements Shape {
@Override
public String name() {
return "圆";
}
}
//实现
public class Square implements Shape {
@Override
public String name() {
return "正方形";
}
}
List<Shape> shapes = new ArrayList<>();