? ? ? ? 抽象类是对对象进行描述,对比普通类就是可以写抽象方法。
? ? ? ? 抽象方法是对行为方法进行的抽象,没有详细内容只是定义了一个行为方法。
以下为抽象类及继承抽象类的子类对抽象方法进行重写:
public abstract class Fu {
private int age;
private String name;
public Fu() {
}
public abstract void show();
public void play() {
....
}
}
public class Zi extends Fu{
@Override
public void show() {
....
}
@Override
public void play () {
....
}
}
可知,抽象类里可以有正常方法和抽象方法,也可以有成员变量,继承的子类可以对抽象方法进行重写,也可以对正常方法进行重写,且抽象类里有构造方法(因为子类要调用父类的构造方法对其成员变量和方法需要进行初始化)。
总结注意事项:
抽象类不能实例化 (因为调用抽象方法没有意义,抽象方法没有具体逻辑代码)
抽象类存在构造方法(因为子类要调用父类的构造方法对其成员变量和方法需要进行初始化)
抽象类中可以存在普通方法 (对对象进行描述需要有普通方法对具体行为做明确)
抽象类的子类?
????????要么重写抽象类中的所有抽象方法(对抽象方法做明确逻辑)
???????? 要么是抽象类 (自己为抽象类时可以不做具体明确)
abstract 与 final(被 final 修饰的方法子类不能重写)、private(被 private 修饰的方法子类不能重写)、static(类名调用抽象方法没有意义)关键字冲突。
接口就是对行为方式做规则化,不做具体的逻辑明确。
接口的特点
接口不能实例化 (调用抽象方法没有意义)
接口的子类(实现类)
????????要么重写接口中的所有抽象方法
????????要么是抽象类
成员变量 只能是常量 默认修饰符:public static final (不可修改的常量)
构造方法 没有
成员方法 只能是抽象方法 默认修饰符:public abstract
类和接口,接口和接口都可以多实现,没有逻辑冲突。
如下代码:
public interface A {
void show();
}
public interface B {
void show();
}
public class C implements A,C{
@Override
public void show() {
....
}
}
?