Java学习——面向对象之抽象类与接口

Java学习——面向对象之抽象类与接口

1.抽象类

抽象类的概述:在Java中,一个方法如果没有方法体,即没有具体的实现,则称该方法为抽象方法。如果一个类中存在抽象方法,那么这个类就是抽象类。
抽象类的特点
1.抽象类和抽象方法必须用abstract关键字修饰
2.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类

/*
    抽象类
 */
public abstract class Test {
    //抽象方法
    public abstract void eat();
    //非抽象方法
    public void sleep(){
        System.out.println("睡觉");
    }
}

3.抽象类中可以有构造方法,且抽象类不能进行实例化。抽象类中的构造方法是用于子类访问父类是对父类数据进行初始化的。
4.抽象类实例化的方法:是用多态的形式,有具体的子类进行实例化。其实这也是多态的一种,抽象类多态。
5.抽象类的子类:要么是抽象类,要么是实现了抽象类中所有的抽象方法
抽象类中成员的特点
1.成员变量:可以是变量,也可以是常量
2.构造方法:有,用于子类访问父类数据时初始化
3.成员方法:可以是抽象的,也可以是非抽象的
抽象类中的抽象方法:是强制子类必须实现的
抽象类中的非抽象方法:子类可以实现也可以不实现,提高代码的复用性。
abstract关键字不能和那些关键字共存
1.private:抽象类设计出来就是被用来继承的,被private修饰的类不能被继承
2.final:被final修饰的类不能被继承
3.static:因为static修饰的方法是静态方法,属于类。而abstract修饰的方法为抽象方法,既没有方法体也不能被直接调用。需要子类去实现抽象方法才能使用。被static修饰的方法可以用类名直接调用,但是被abstract修饰的方法肯定不能被类名直接调用,互相矛盾。
一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
一个类没有抽象方法是可以定义为抽象类的,但是该类是不能创建对象的。

2.接口

接口的概述:一个全部由抽象方法组成的集合,接口里面只能是抽象方法和常量。
接口体现的含义:接口体现的是事物扩展的功能。在Java中,类定义的是一个实体包括实体的属性,行为。而接口定义了一个实体可能发生的动作,只有一个声明,并没有具体的实现。举个例子,比如说狗一般是看门,猫一般是作为宠物。但是我们现在有很多驯养员可以训练出狗跳火圈,猫跳高等……一些技能。这些技能是狗和猫天生所不具备的,是通过后天的训练所学会的,所以这些额外的技能不适合直接定义到猫类或者狗类里。所以我们为了体现事物的扩展性,就会把这些后天学会的额外的功能定义到接口里,到时候那些猫或者那些狗向学这些额外的功能就去实现这个接口即可。
接口的特点
1.用 interface 关键字定义一个接口
格式:interface 接口名{}
2.要实现这个接口用 implement 关键字
格式:class 类名 implement 接口名{}
3.接口不能实例化
接口只能通过子类去实现该接口的功能
4.接口的子类:可以是抽象类(意义不大),也可以是重写了接口中的所有方法的类(常用)

//定义了一个接口MyInterface
public interface MyInterface {
    public abstract void show();
    //默认修饰符为:public abstract,可以不用写出
    void test();
}

//定义一个MyTest类去实现MyInterface接口,并重写接口中的所有抽象方法
class MyTest implements MyInterface{

    @Override
    public void show() {
        System.out.println("show方法");
    }

    @Override
    public void test() {
        System.out.println("test方法");
    }
}

接口成员的特点
1.成员变量:
只能是静态的常量。即接口中的成员变量都被public static final修饰。默认给出,可以不用写
2.构造方法:无
3.成员方法:
接口中所有的成员方法都是抽象的,即所有的方法都被public abstract修饰。默认给出,可以不用写
注意:在JDK1.8之后再接口中可以写用default修饰的方法,并且可以有具体的实现。应该是为了弥补Java不能多继承的不足,所以可以实现多个接口中的方法,用多继承同等效果。
类、接口之间的关系
1.类与类:继承关系,只能单继承,可以多层继承
2.类与接口:实现关系,可以实现,也可以多实现。而且还可以继承一个类同时实现多个接口
3.接口与接口:继承关系,可以单继承,也可以多继承。
接口与抽象类的设计理念的区别
1.抽象类:被继承体现的是:”is a”的关系。 抽象类中定义的是该继承体系的共性功能。
2.接口:被实现体现的是:”like a”的关系。 接口中定义的是该继承体系的扩展功能。

猜你喜欢

转载自blog.csdn.net/qq_43411550/article/details/89365210