抽象类的概念:
在Java中包含一个抽象方法的类称为抽象类。抽象类也必须使用 abstract class声明。(疑问???)
一个抽象类中可以没有抽象方法。(编译无错误)所以抽象类的 定义是否 可以修改成,用abstract声明的类是抽象类。
抽象方法必须写在抽象类或者接口中。
抽象方法的概念:
只声明而未实现的方法称为抽象方法,抽象方法必须使用 abstract关键字声明。
例子:
public abstract void fun() ;
// 抽象方法,只声明而未实现
在抽象类的使用中有几个原则:
· 抽象类本身是不能直接进行实例化操作的,即:不能直接使用 关键字new完成。
· 一个抽象类必须被子类所继承,被继承的子类(如果不是抽象 类)则必须覆写抽象类中的全部抽象方法。
1、抽象类能否被final声明?
* 不能,因为final属于终结器,被其修饰的类是不能有子类的。
* 而抽象类必须有子类。
2、抽象类能否有构造方法?
* 能有构造方法,而且子类对象实例化的时候的流程与普通类的继 承是一样的。都是要先调用父类的构造方法(默认是无参的),之后在调用 子类自己的构造方法。
只是抽象类中的构造方法虽然有,但依然无法 直接通过抽象类产 生实例化 对象。
因为一旦有实例化产生,则意味着可以调用类中的方法了,但抽象 方法本身只是一个声明,并没有具体的实现,所以即便存在了构造,外部也 是不能直接调用的,而只能由子类通过构造方法调用并复写。
抽象类就是普通类的一个扩展,只是在普通类的基础上加了抽象方 法,除此之外没有什么区别。抽象类是用来被继承的。
接口
如果一个类中的全部方法都是抽象方法,全部属性都是全局变量,那么此时就可以将这个类定义为接口。
接口格式:
interface 接口名称{
全局常量;
抽象方法;
}
注意:
1、接口中的所有方法的访问权限都是public。
2、接口本身都是由全局变量和抽象方法组成的,所以可以简化,不写 public,static ,final ;public ,abstract;
一个接口必须要子类实现,如果这个子类不是抽象类,要复写接口的所有抽象方法。
子类继承接口采用如下的语法格式:
class 子类 implements 父接口1,父接口2,。。。{}
一个类可以实现多个接口。
一个子类既要实现接口又要继承抽象类,则按一下格式编写:
class 子类 extends 父类 implements 父接口1,父接口2,。。{}
那么此时的子类不光要复写抽象类的方法,还要复写接口中的全部操作。
注意:
1、在开发中一个抽象类可以实现多个接口,但是一个接口不能继承一个抽象类。
2、一个接口虽然不能继承抽象类,但是一个接口允许同时继承多个接口。
多态性
多态性分为两种:一种属于方法的重载与复写,一种是对象的多态 (转型)。
* 向上转型:将子类实例变为父类实例
格式:父类 父类对象 = 子类实例;-> 自动完成
数据类型实例:int i= 'c'; -> 因为c的容量比int小,所以自动完成。
* 向下转型 : 将父类实例变为子类实例
格式:子类 子类对象 = (子类)父类实例; -> 强制完成
数据实例:char c = (char)98; ->因为整形的容量比char大,所以强制转换。
注释: 向上转型:父类对象只能能调用公有的方法,属性 被子类复写过的就只能调用复写的方法属性。 但不能调用子类的独有的方法。
向下转型:先上转型 在向下转型才能运行 ,调用的都是子类的方法(包括子类继承的方法,复写的方法)。