Java 抽象类+接口
抽象类
当父类的某些方法需要声明,但又不确定如何实现时(父类方法不确定性问题),可以将其声明为 抽象方法,这个类就是 抽象类
public abstract class Animal{
abstract public void eat(); // 抽象方法没有方法体
}
一般来说,抽象类会被继承,由其子类具体实现
细节
-
抽象类不能被实例化
-
抽象类 不一定要包含抽象方法,还可以有实现方法
-
抽象类本质就是类,类有的它都有
-
abstract
只能修饰类和方法 -
如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它也声明为抽象类
class Cat extends Animal{ @Override public void eat(){ // 有方法体就是重写,不管方法体里写了什么 } }
-
抽象方法不能使用 private,final,static 来修饰(这些关键字和重写相违背)
接口
把一些没有实现的方法封装到一起,到某个类要使用时再根据具体情况把这些方法写出来
interface 接口名{
// 属性
// 方法
}
class 类名 implements 接口{
// 自己属性
// 自己方法
// 必须实现的接口抽象方法
}
在jdk7.0之前,接口里的所有方法都没有方法体(都是抽象方法)
jdk8.0之后,接口可以有 静态方法,默认方法,也就是接口中可以有方法的具体实现
public interface AInterface{
public int n1 = 1;
void hi(); // 在接口中,可以省略abstract
// 默认方法
default public void ok(){
}
// 静态方法
pulic static void cry(){
}
}
class A implements AInterface{
@Override
public void hi(){
}
}
细节
-
接口 不能被实例化
-
接口中的 所有方法都是 public 方法,接口中的抽象方法,可以不用 abstract 修饰
-
一个普通类实现接口,就必须将该接口的所有抽象方法都实现
-
抽象类实现接口,可以不用实现接口的方法
-
一个类可以同时实现多个接口
interface IA{ void hi(); } interface IB{ void hello(); } class A implements IA,IB{ @Override public void hi(){ } @Override public void hello(){ } }
-
接口中的 所有属性只能是 public final static 的(必须初始化)
接口名.属性名
-
接口不能继承其它的类,但可以继承多个别的接口
-
接口的修饰符只能是 public 和 默认,和类一样
继承与接口
-
当子类继承了父类,就自动拥有父类的功能,如果子类需要扩展功能,可以通过实现接口的方式扩展
-
继承的价值在于 解决代码的复用性和可维护性
接口的价值在于 设计好各种规范,让其它类去实现这种方法
-
接口在一定程度上可以实现 代码解藕(接口规范性+动态绑定)
接口的多态性
-
多态参数:接口类型的变量 可以指向 实现了接口的类的对象实例
-
多态数组:接口类型数组
-
多态传递
IN in = new AA(); IM im = new AA(); interface IM{} interface IN extends IM{} class AA implements IN{}
练习
interface A{
int x = 1;
}
class B{
int x = 10;
}
class C extends B implements A{
public void pX(){
// 明确指定x
System.out.println(super.x);
System.out.println(A.x);
}
public static void main(String[] args){
new C().pX();
}
}
标签:27,Java,void,接口,class,抽象类,方法,public
From: https://www.cnblogs.com/wxrwajiez/p/18523931