JAVA_SE_笔记整理(面向对象三(多态,抽象类))

面向对象三(多态,抽象类)

1、多态:

某一事物,在不同时刻表现出来的不同状态。

举例:

猫可以是猫的类型。猫 m = new 猫();

同时猫也是动物的一种,也可以把猫成为动物

动物 d = new 猫();

水在不同时刻的状态

多态的前体和体现

继承关系

有方法重写

有父类有引用指向子类对象

多态案例以及成员访问特点

按照前提写一个多态案例

成员访问特点:

成员方法:

编译看左边(语法),运行看右边(执行代码)

成员变量:

编译看左边(语法),运行看左边(执行父类变量)

静态方法:

编译看左边(语法),运行看左边(执行父类静态方法)

多态好处与弊端:

多态的好处:

提高了程序的维护性(由继承保证)

提高了程序的扩展性(由多态保证)

多态的弊端:

不能访问子类特有功能

如果能够访问子类的特有功能呢?

多态中的转型

2、多态转型:

向上转型:

用子类对象赋值给父类变量,将子类交给了父类;父类引用执行子类对象;

动物 d = new 猫();

向下转型:

用父类对象赋值给子类变量,将父类交给了子类;父类引用转为子类对象;

猫 m = (猫)父类对象;

子类转父类,默认转换

父类转子类,强制类型转换,前提,这个父,本质就是子类,在可以转换。如果本质就是父类,编译不会报错,执行时报运行时异常。java.lang.ClassCastException

3制作帮助文档

我想要对数组进行操作

如何制作一个说明书呢?

A:写一个工具类

B:对这个类加入文档注释

怎么加呢?

加些什么东西呢?

@author

@version V.10

@param 这是要被遍历的数组

@return 返回数组中的最大值

D:格式

javadoc -d 目录 ArrayTool.java

目录:就可以写一个文件夹的路径

制作帮助文档出错:

找不到可以文档化的公共或受保护的类:告诉我们类的权限不够

4、抽象类

在java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类

如果一个类中包含了一个或者多个抽象方法,类就必须定义为abstract(抽象)。“抽象方法”属于不完成的方法,只包含一个声明,没有方法主体。

抽象类的特点:

抽象类和抽象方法必须用abstract关键字修饰

格式:

abstract class 类名{

}

public abstract void eat();

抽象类不一定有抽象方法,有抽象方法的类,一定是抽象类。

抽象类不能实例化

那么,抽象类如何实例?

按照多态的方式,由具体的抽象类的子类实例。

抽象类的子类

要么事抽象类,要么实现抽象类中的所有抽象方法。

抽象类的成员特点:

成员变量:可以是变量,也可以是常量

构造方法:有构造方法,但是不能实例化,那么构造方法的作用是什么?用于父类数据初始化,在子类new或者主动调用父类构造时。

成员方法:可以有抽象方法,作用是限定子类必须完成某些动作。

可以有非抽象方法,提供代码复用性。

抽象类的几个小问题:

一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?

abstract不能和哪些关键字共存

private 冲突

final 冲突

static 无意义

原文地址:https://www.cnblogs.com/songliuzhan/p/12624132.html