龙空技术网

Java笔记五:多态、抽象类、接口

猕猴桃小夏 142

前言:

目前同学们对“抽象类中的方法必须都是抽象方法”大约比较关怀,我们都需要知道一些“抽象类中的方法必须都是抽象方法”的相关知识。那么小编也在网络上网罗了一些对于“抽象类中的方法必须都是抽象方法””的相关资讯,希望大家能喜欢,大家快快来了解一下吧!

#头条创作挑战赛#

多态

多态的书本概念:多态指的是同一个对象,在不同时刻表现出的不同形态。

通俗理解就是:实例化对象的时候,new的不是左边的父类或者接口类,new的对象是你继承或者实现接口的那个类。

利用公式来说:Fu fu = new Zi();

- 多态的前提:要实现多态,必须要有继承/实现(接口)关系,有方法的重写,有父类引向指向子类

多态中成员的访问特点:

- 成员变量:编译看左边,执行看左边。编译时如果左边没有,编译就会报错

- 成员方法:编译看左边,执行看右边。但是编译的时候左边没有,也会报错

多态的三种表现形式:

- 具体类多态- 抽象类多态- 接口类多态

本文最后把这三个表现行形式会用代码形式进行讲解。

抽象类

抽象类的书中概述:

- Java中允许定义一个没有方法体的方法,这个方法就被称为抽象方法,而抽象方法所在的类,就被称为抽象类。(如果一个类中存在抽象方法,那这类必须定义为抽象类)

抽象的特点

- 抽象必须被关键字**abstract**修饰。- 抽象类中不一定有抽象方法,但是有抽象方法的类一点是抽象类。- 抽象类不能实例化,必须经过多态创建子类对象实例化。- 抽象类中的子类要么重写,要么自己也定义为抽象类- 抽象类的成员特点:成员方法中,可以有抽象方法,子类必须重写。也可以有非抽象方法,提供方法的复用性。

接口

接口的书中概念

- 接口是一种公共的规范标准,只要符合规范标准,大家都可以使用Java中的接口。- 通俗来说:接口就是一个已经写好的类,谁都可以调用,就相当于一个电源插口,只要你有需要直接插上充电器就可以随便使用。

接口的特点

- 接口必须用interface关键字修饰- 实现这个接口必须用implements关键字修饰。- 接口和抽象类一样,不能被实例化,也是通过多态实现实例化。- 接口的实现类要么重写接口中的方法,要么自己定义为一个抽象类- (接口实现类的命名约定(大家都遵守的一个约定)):接口名+Impl,例如:InterImpl。- 接口中的成员变量:默认为 **public static final**修饰。意思是公共的可被接口名直接调用的常量(不能被修改)的变量。- 接口中的构造方法:接口中没有构造方法,- 接口中的成员方法:接口中的成员方法只能是抽象方法(**单指在JDK7之前,JDK8有所改变**)

综合案例

- 定义一个接口类

//接口:报警interface Alarm {void callPolice();}
- 定义一个抽象父类
//父类:门abstract class Door {private int width;private int height;private String brand;public Door() {}public Door(int width, int height, String brand) {this.width = width;this.height = height;this.brand = brand;}public int getWidth() {return width;}public void setWidth(int width) {this.width = width;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public abstract void open();public abstract void close();}
- 定义一个电动门子类继承父类并实现接口
//子类:电动门class ElectricAlarmDoor extends Door implements Alarm {public ElectricAlarmDoor() {}public ElectricAlarmDoor(int width, int height, String brand) {super(width, height, brand);}//重写接口的方法@Overridepublic void callPolice() {System.out.println("能够自己报警");}//重写父类的方法@Overridepublic void open() {System.out.println("自动打开");}//重写父类发方法@Overridepublic void close() {System.out.println("自动关闭");}}
- 定义一个木门子类继承父类
//子类:木门class WoodDoor extends Door {public WoodDoor() {}public WoodDoor(int width, int height, String brand) {super(width, height, brand);}//重写父类方法@Overridepublic void open() {System.out.println("手动打开");}//重写父类方法@Overridepublic void close() {System.out.println("手动关闭");}}
- 测试类
public class Dome06 {public static void main(String[] args) {//父类实例化,使用多态// 编译看左边,打印看右边Door door = new ElectricAlarmDoor(200, 150, "电动门");System.out.println(door.getWidth() + ", " + door.getHeight() + ", " + door.getBrand());door.open();//接口类实例化Alarm alarm = new ElectricAlarmDoor();alarm.callPolice();door.close();System.out.println("-------");door = new WoodDoor(200, 150, "木门");System.out.println(door.getWidth() + ", " + door.getHeight() + ", " + door.getBrand());door.open();door.close();}}

标签: #抽象类中的方法必须都是抽象方法