abstract 抽象
public abstract void eat();
抽象方法,没有大括号,即没有方法体
抽象方法存在的意义:约定 (约定大于配置,配置大于编码)
约定:自定义的规则。
约定规则定义了哪些规则:约定了返回值,访问权限,参数列表 需要在重写的时候去定义方法体
抽象方法必须在一个抽象类里
public abstract class Animal{}
定义了一个抽象类,结构:属性,成员,构造器,抽象方法,常量
抽象类中可以没有抽象方法
抽象类是不能被实例化的。
抽象类不能创建对象。
抽象类的构造器存在的意义 为了约定子类的构造器必须和父类要匹配
一个类如果继承了抽象类,就必须重写这个抽象类的所有的抽象方法
abstract能修饰什么
类、方法
抽象方法不能用private final 修饰
抽象类不能用final修饰,用final修饰的类是不允许被继承的
总结:
1.抽象方法必须是public 或者protected 默认情况下是可以的
2.抽象类是不能被实例化的,需要依靠子类采用向上转型的方式处理
3.抽象类必须有子类 ,使用extends继承,一个类只能继承一个抽象类
4.子类如果不少抽象类,则必须重写抽象类中的所有抽象方法
如果子类没有实现父类的抽象方法,必须将子类也定义为abstract
接口
比抽象类更高级的抽象,就是接口
抽象类比类更高级的抽象
interface 接口
声明:使用interface关键字 public interface Ch02;
JDK1.7之前:接口中只能定义抽象方法、静态的常量和静态方法,不能有方法,不能有属性
JDK1.8及以后:接口中只能定义抽象方法,也不能有属性,但是可以有默认方法和静态方法,也可以有静态常量
JDK7到JDK8:默认方法,静态方法。
默认方法:pubic default void info(){}
接口中结构的特点:
1.接口中的抽象方法默认是public abstract,通常省略
2.接口中的常量默认public static final 省略
接口中的结构必须是public
接口可以被一个类实现,实现类 如果一个类实现了一个接口,他就需要重写所有的抽象方法
比如说A类 implements接口,我们就是A是这个接口的实现类
public class Cat extends Animal implements Biology{}
这个Cat类就继承了Animal类同时实现了Biology接口 Cat类可以叫Animal子类 也可以叫Biology接口
实现接口是可以多实现的,继承只能单继承
优先选择接口解决问题
面试题:继承抽象类和实现接口的异同
继承:单继承 实现接口:多实现
都需要重写所有的方法
抽象类和接口的区别:
继承:单继承 实现接口:多实现
抽象类放的东西多,接口少
接口存在的意义:约定
面向接口编程:主写接口
多态的前提条件?