抽象类的应用

发布于:2022-11-09 ⋅ 阅读:(703) ⋅ 点赞:(0)

抽象类

​概述

​父类当中的方法,被他的子类们重写,子类的各自实现又不一样。那么父类的方法声明和方法体,只有声明还有意义,而方法体内容则没有存在的意义。我们把这种没有方法体内容的方法称为抽象方法。Java语言规定,如果一个类包含了抽象的方法。那么该类就是一个抽象类

定义:

​抽象方法:没有方法体的方法

抽象类:包含抽象方法的类

abstract关键字的使用格式

抽象方法

​使用abstract关键字修饰成员方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。

​定义格式:

修饰符   abstract 返回值类型  方法名(参数列表);

示例代码:

public abstract void run();

// 吃饭的抽象方法

public abstract void eat();

// 跳跃的抽象方法

public abstract void jump(); 

抽象类

​如果一个类包含了抽象方法,那么该类就是一个抽象类。

定义格式:

修饰符 abstract class ClassName {}

public abstract class Animal {
    // 奔跑的抽象方法
    public abstract void run();
}

抽象的使用

继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为一个抽象类。

注意事项

关于抽象类的使用,需要注意的事项:

抽象类不能创建对象如果创建对象,编译无法通过。只能创建其非抽象子类的对象。
抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
抽象类的子类,必须重写父类中的所有的抽象方法,否则编译无法通过,除非该子类也是抽象类。

具有相同或相似性质的一组对象的抽象就是类,类是对一类事物的描述,是抽象的、概念上的意义;

对象是实际存在的该类事物的每个个体,因此也称为实例;

对象的抽象是类,类的具体化就是对象,也可以说类的实例就是对象。类用来描述一系列对象,概述了每个对象应包括的数据,并概述了每个对象的行为特征。

面向对象的三个基本特征:

一、封装

对象要有一个明确的边界;边界的划分(对象各司其职、对象的粒度、对象的可重用性)

        具体来说:
                1.属性: 私有 private(提供set和get方法)
                2.方法: 公开或私有public/private
                3.方法声明 --> 公开
                  方法实现 --> 隐藏
                 实现改变时,对对象的使用者没有影响。 

 共性放到父类,特性放到子类;子类,父类 --> 其实就是特殊 --> 一般
        1.关键字: extends  例如:Dog extends Animal{}
        2.java中一个类最多只能有一个直接的父类,即单继承(具有简单性、树形结构),
          C++中是单继承
          java中要实现多继承,通过接口来实现。
        3.父类中所有属性和方法都能继承给子类;父类中的私有方法不能继承给子类。
        4.java中的访问修饰符

访问修饰符 访问权限 继承
private 本类内部 不能继承
default 本类+同包 同包子类可以继承
protected   本类+同包+不同子包   可以继承
public 公开 可以继承9 

5.构造对象过程
                   (1)分配空间
                   (2)递归地构造父类对象
                                a. 父类 初始化属性
                                b. 父类 构造方法
                   (3)初始化属性
                   (4)调用构造方法

6.super  
用法:
super()  调用父类的构造方法,只能出现在构造方法的第一行
super.方法名   super表示父类的对象,通过它去调用父类的方法
注意:在写类的时候,一定要写默认无参的构造方法,如果一个构造方法的
第一句既不是this(),也不是super()时,那么就会在这里隐含的调用
他的父类的无参的构造方法,即隐含的有super()。

三、多态

 运行时多态。
  子类的对象放在父类的引用中,例如 Animal a=new Dog,子类对象当父类对象来使用。

1.多态原则

(1)对象类型不变
(2)只能用引用调用其引用类型中定义的方法
(3)运行时,根据对象的实际类型去找子类覆盖之后的方法

例子:

有Animal类中有eat()和sleep()两个方法,sleep()中睡8小时;子类Dog中有eat()方法,sleep()方法中睡6小时,还有wangwang()方法。现创建Animal a=new Dog(); 不能调用a.wangwang(),调用a.sleep()输出睡6小时。

 2.对象的强制转换

格式: 引用 instanceof 类型

引用所指的对象是否与类相符,返回值boolean值。
                 用法:

 Animal a=new Cat();
                       if(a instanceof Dog)
                       {
                          Dog d=(Dog)a;
                          d.wangwang();
                        }

 说明:如果只有Dog d=(Dog)a;运行时错误,因为a是Cat而不是Dog (多态原则第一条)

 3.多态的灵活变换
(1)用于参数列表上:
 public void m(A a){} 可以用A类的任何子类对象作为参数
(2)用在返回值上:
 public A m(){}  这个方法可能返回A类的任何子类对
 

本文含有隐藏内容,请 开通VIP 后查看