------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一、抽象类
1.定义
Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:猫和狗,它们之间是不同的,但是它们又都属于动物这样一个概念,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。
2.特点
1)抽象方法一定在抽象类中,只对方法进行声明,没有方法主体。
2)抽象方法和抽象类都必须被abstract关键字修饰。
3)抽象类不可以用new创建对象。因为调用抽象方法没意义。
4)抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。
如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
//定义一个抽象动物的父类
abstract class Animal
{
//抽象方法
public abstract void eat();
}
//定义子类猫,继承动物类,复写抽象方法
class Cat extends Animal
{
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("猫吃老鼠");
}
}
//定义子类狗,继承动物类,复写抽象方法
class Dog extends Animal
{
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("狗吃骨头");
}
}
3.与一般类的区别
抽象类与普通类的区别就是不能创建实例对象和允许有abstract方法,其他都一样。
意味着抽象类可以继承类,也可以实现接口,内部也有构造函数,可以有静态的main方法,只要理解了抽象类和一般类的区别,对一些常见问题就很容易回答
4.注意事项
抽象关键字abstract和哪些关键字不可以共存
final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。
private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。
而抽象方法出现的就是需要被复写。
static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。
可是抽象方法运行没意义。
二、接口
1.定义
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。可以被认为是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。接口使用interface来表示,子类中用implements实现。可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。
2.格式特点
接口中常见定义:常量,抽象方法。
接口中的成员都有固定修饰符。接口中的成员都是public的。
常量:public static final
方法:public abstract
3.特点
1)接口是对外暴露的规则。
2)接口是功能的扩展。
3)接口的出现降低了耦合性
//定义一个抽象动物的父类
abstract class Animal
{
//抽象方法
public abstract void eat();
}
//定义一个爬树的功能
interface ClimbTree
{
public void climbtree();
}
//定义子类狗,继承动物类,复写抽象方法
class Dog extends Animal
{
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("狗吃骨头");
}
}
//定义子类猫,继承动物类,实现爬树接口,复写方法,具备爬树的功能
class Cat extends Animal implements ClimbTree
{
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("猫吃老鼠");
}
@Override
public void climbtree() {
// TODO Auto-generated method stub
System.out.println("上树");
}
}
三、抽象类和接口的区别
相同点:
1.都是不断向上抽取的概念
2.通常都在顶层。
3.可以在内部定义抽象方法
4.都不可以实例化,需要子类来实现。
不同点:
1.抽象类体现继承关系,一个类只能单继承。
接口体现实现关系,一个类可以多实现。同时接口与接口之间有继承关系。
2.抽象类可以有构造方法,接口中不能有构造方法
3.抽象类中可以有普通成员变量,接口中没有普通成员变量
4.抽象类中可以包含非抽象的普通方法,
接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
5.抽象类中的抽象方法的访问类型可以是public,protected
接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
6.抽象类中可以包含静态方法,接口中不能包含静态方法
7.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意
接口中定义的变量只能是public static final类型,并且默认即为public static final类型。