面向对象特征:抽象
Java中,除了类还有抽象类和接口
抽象方法:用抽象修饰的方法叫抽象方法
没有方法体(没有大括号)
抽象方法存在的意义是什么?
存在的意义是为了约定
根本意义,约定,自定义的规则
抽象方法到底约定了什么?(规定了什么?定了哪些规则?)
约定了返回值、访问权限、参数列表。需要在重写的时候去定义方法体
约定大于配置,配置大于编码
抽象方法必须在一个抽象类里
public abstract class Animal{
private String name;
private Integer age;
1、抽象类里可以有哪些结构:
属性、成员方法、构造器、抽象方法、常量
定义常量:
final String STR = "哈哈";
2、抽象类中可以没有抽象方法
3、抽象类是不能被实例化的(抽象类不能被创建对象)
4、抽象类的构造器存在的意义
为了约定子类的构造器和父类必须要匹配
5、一个类如果继承了一个抽象类,就必须重写这个抽象类所有的抽象方法
abstract能修饰什么?
类和方法。
抽象方法不能用private修饰,可以用public protected 默认的修饰
开发中,抽象方法基本上都是public
抽象方法不能用final修饰。用final修饰的方法是不允许重写、不能被覆盖的。
抽象类不能用final修饰。用final修饰的类是不允许被继承的。
总结:
- 抽象方法必须是public或protected或默认的(default)(因为如果是private是不能被子类继承的,子类便无法实现该方法)
- 抽象类不能被直接实例化,需要依靠子类采用向上转型的方法处理
- 抽象类必须有子类,使用extends继承
- 子类(前提:如果不是抽象类)则必须重写抽象类中的所有抽象方法(如果子类没有实现弗雷德抽象方法,必须将子类也定义为abstract)
抛出异常:
接口
比抽象类更高级的抽象
接口的声明:使用interface关键字
JDK7之前接口中只能定义抽象方法,不能有属性,不能有方法(也可以放静态常量和静态方法)
JDK8及以后:接口中只能定义抽象方法,不能有属性,可以有默认方法和静态方法、静态常量
图标发生变化
可以定义的方法
接口中结构的特点:
- 接口中的抽象方法默认是public abstract,我们推荐省略
2.接口中的常量默认是public static final,我们推荐省略
接口中的结构必须是public
接口可以被一个类实现,这个类叫实现类
比如A类 implements 接口,那我们就说A是这个接口的实现类
如果一个类实现了一个接口,那它就需要重写接口中所有的抽象方法
实现接口是可以多实现的,但是继承只能单继承
用逗号隔开
在开发中,如果一件事情可以通过继承和实现接口来解决问题,优先选择使用接口解决
面试题:
继承抽象类和实现接口的异同。
·必须重写所有抽象方法
·继承抽象类是单继承,实现接口是多实现
2.抽象类和接口的区别。
·抽象类能放属性、普通成员方法、构造器等
·接口能放属性、成员方法、静态方法和默认方法
接口存在的意义?
约定
面向对象编程
面向接口编程(主要写接口)
- 写测试类
- 写sql语句
- 写实现类(写方法体)
面向切面编程
多态的前提条件
- 继承,实现
- 重写方法
- 父类指向子类,接口指向实现类
面试题:
在Java中只有单继承?
不对,有多继承。在Java中存在多继承,多继承发生在接口之间
Java类与类之间只有单继承
抽象类也是比类更高级的抽象
匿名实现类