抽象:
我们之前上课所说的一些案例,比如猫狗案例,披萨案例等等,想动物这些东西不应该是一个具体的事物,而是一个抽象的事物。
像动物中吃或者睡,这些方法应该也不是一个具体的方法。我们就不应该把动物定义为一个具体的类而是一个抽象的类,像不具体的方法
我们也应该定义成一个抽象的方法。

抽象类特点
抽象类和抽象方法必须用abstract关键字修饰
格式
abstract class 类名 {}
public abstract void eat();
注意事项:
1、没有具体实现的方法,要被定义成抽象方法,而抽象方法是没有方法体的,连大括号都没有。
2、如果一个类中存在抽象方法,这个类就必须是抽象类。
3、抽象类不能被实例化
问题:那么如何实例化使用里面的东西
需要一个具体的类继承该抽象类,利用多态的形式来创建对象(抽象多态)
4、具体的类继承一个抽象类就必须实现该抽象类中所有的抽象方法
5、抽象类去继承抽象类,可以不用实现父抽象类中的抽象方法
6、抽象类中既可以存在抽象方法,也可以存在具体的方法实现。
7、抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类

抽象类成员的特点:
成员变量:既可以是变量,也可以是常量
构造方法:有构造方法。问题是刚刚才说过,抽象类不能被实例化,这里的构造方法有什么用呢?
用于子类访问父类的初始化。
成员方法:既可以是抽象方法,也可以是具体的方法。
具体的类继承抽象类,强制要实现抽象类中的所有抽象方法。
抽象类继承抽象类,可以选择性地实现。

一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
一个抽象类可以没有抽象方法,意义是什么?
如果说有一堆东西,他们都有共同的概念,这写概念本身在现实生活中是没有办法看得见摸得着的,我们把这些概念用一个类来概括,这个类中没有抽象方法,仅表示这一堆东西共同的概念,而这个类本身也没有办法创建对象,所以定义为抽象类。

抽象类中有没有方法,是由什么决定的?
取决于这么一堆东西有没有共同的行为,如果他们之间仅仅只是存在着共同本质,但是没有共同的行为,在现实生活中也是合情合理的。
1、抽象类中可以没有抽象方法
2、不能创建对象

abstract不能和哪些关键字共存
private 冲突
final 冲突
static 冲突

接口:
你可以将接口看成一个特殊的类。
接口的特点:
1、接口用关键字interface表示
格式:interface 接口名 {}
2、类实现接口用implements表示
格式:class 类名 implements 接口名 {}
3、接口不能实例化
那么,接口如何实例化呢?
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,接口多态。
4、接口的子类
要么是抽象类
要么是具体的类重写接口中的所有抽象方法
到目前为止,我们学过哪些多态:
1、具体的类之间的多态 (最后)
2、抽象多态 (其次是抽象多态)
3、接口多态(最常用的是接口多态)

接口中成员的特点:
成员变量:只能是常量,系统默认添加public static final修饰符
今后开发中,不用写默认修饰符,因为会自动添加上
但是就现在学习阶段,加上,防止你自己误解。
构造方法:
接口不能被实例化,接口中没有构造方法。
成员方法:只能是抽象方法,系统会默认给出修饰符:public abstract
今后开发中,不用写默认修饰符,因为会自动添加上
但是就现在学习阶段,加上,防止你自己误解。

类与类,类与接口以及接口与接口的关系

类与类:继承关系,不能多继承,但是可以多重继承形成继承体系
类与接口的关系:实现关系,一个类可以实现多个接口
接口与接口之间的关系:继承关系,一个接口可以同时继承多个接口,多个接口之间使用逗号隔开。

需求:人是学生的父类,这个学生会抽烟。(在继承一个类的同时还实现了接口)

Java中所有的类都一个共同父类:Object