抽象方法的基本概念
~抽象的反义词是具体,抽象方法也就是不能具体实现的方法(即抽象方法指不能具体实现的方法),
抽象方法没有方法体要使用abstract关键字修饰。
抽象类使用时的语法格式
访问权限修饰符 abstra 返回值类型 方法名();
~没有方法体
eg:public abstract void cry();
抽象类的概念
抽象类就是不能具体实例化的类,也就是不能通过类创建对象,。
关于抽象类的注意事项
1.抽象类中可以定义成员变量,成员方法和构造方法。
2.抽象类中可以有抽象方法也可以没有抽象方法。
3.有抽象方法的类一定是抽象类
~注意:严格来说,只有具有抽象方法且用abstract关键字修饰的类才是真正的抽象方法。
~抽象类不能创建对象是因为担心新手程序员通过创建对象调用抽象类中的抽象方法。
实际意义
抽象类的实际意义不在于创建对象,而在于“被继承”,当一个类继承抽象类之后,要么重写这个抽象类中的抽象方法,要么继承的类也要定义为抽象类。
~强制性:强制性就是这里的子类必须要重写抽象类的抽象方法,或者这个类就也要定义为抽象类。
~规范性:规范性就是子类就是子类要重写抽象类中的抽象方法,所以就要遵守方法重写规范。
方法重写的规范
1.权限修饰符可以不变,也可以换成跟高权限的权限修饰符。
2.返回值类型也要想同或者返回子类类型。
3.方法名相同。
4.参数列表想同。
接口基本概念
接口是一种比抽象类抽象地更彻底的类:接口中所有成员方法都是抽象方法。
~定义类的关键字是class
~定义接口的关键字interface
~继承的关键字是extends
~实现接口的关键字是implements
注意:
接口中不能定义成员变量,只能定义常量。
~接口中只能被public,static,final关键字修饰的常量。
接口中的所有方法都是抽象方法
~接口中的方法只能被public,abstract,static,default和strictfp修饰。
类与接口之间的关系
类和类之间的关系:
类和类之间使用extends关键字表示继承关系,并且类继承类只能单继承。
类和接口之间的关系
类和接口之间使用implentent表示实现的关系,类和接口之间支持多实现(也就是一个类可以通过接口多实现)
接口和接口之间的关系
接口与接口使用extends表示继承的关系----接口之间可以多实现
~接口解决了java中无法进行多继承的问题。
例:假设 品牌接口 消费人群接口 产品类
这里产品类可以同时实现品牌接口和消费人群接口,也就解决了java中不能多继承的问题。
//这里建立了一个Company接口(即公司接口) public interface Company { } //这里建立了一个Consumer接口(即消费人群接口) interface Consumer{ } /*这里建立了一个product类实现了上边两个接口 如果上述接口有方法,则product实现后,必须重写上述接口中的方法 */ class product implements Company,Consumer{ }
抽象类和接口只能用于多态,只能是使用多态的方式
(因为抽象类和接口均不可以创建对象,所以只能是声明一个引用去指向以子类或者实现类为模板创建的对象,从而完成多态)
抽象类----子类
接口----实现类
~一个类实现某个接口后必须实现该接口的定义的所有方法(因为接口的方法都为抽象方法)
接口间可以存在继承关系,一个借口可以通过extends关键字继承另一个接口,子接口继承了父接口中定义的所有方法,所以当一个类实现了这个子接口时,那么这个类必须实现(重写)这个子接口与父接口的所有方法。
抽象法和接口之间的区别
1.定义抽象类的关键字abstract class,而定义接口的关系是interface。
2.继承抽象类的关键字extends,而实现接口的关键字implements。
3.抽象类中可以有构造方法,而接口中不可以有构造方法。
5.抽象类中可以有一般方法,而接口中只能有抽象方法。
6.抽象类中可以有成员变量,而接口中只能有常量。
7.抽象类增加的方法不一定影响子类,而接口增加的方法一般都会影响子类(抽象类中增加的方法可以是抽象方法,也可以是一般方法,所以不一定需要在子类中实现,而接口中增加的方法正能是抽象方法也就必须在子类中实现)