11.面向对象(3)

MODULE 11 面向对象

  1. 会定义接口
  2. 会在接口中定义抽象方法,默认方法,静态方法,成员变量
  3. 会调用接口中的成员
  4. 会利用多态的方式new对象
  5. 知道多态的前提
  6. 要知道使用多态的好处
  7. 会在多态的前提下,向下转型
  8. 会利用instanceof判断类型

一.接口

(一)接口的介绍

1.接口:是一个引用数据类型,是一个标准,规则

2.关键字:

(1)interface接口

public interface 接口名{}

(2)implements 实现

实现类 implements 接口名{}

3.接口中可以定义的成员

(1)jdk7以及之前:

抽象方法:public abstract -> 即使不写public abstract,默认也有

成员变量:public static final 数据类型 变量名 = 值 -> 即使不写 public static final,默认也有

final是最终的,被final修饰的变量不能二次赋值,所以我们一般将 final修饰的变量视为常量

(2)jdk8:

默认方法:public default 返回值类型 方法名(形参){}

静态方法:public static 返回值类型 方法名(形参){}

(3)jdk9开始:

` 私有方法:private的方法

(二)接口的定义以及使用

1.定义接口:

public interface 接口名{}

2.实现:

public class 实现类类名 implements 接口名{}

3.使用:

(1)实现类实现接口

(2)重写接口中的抽象方法

(3)创建实现类对象(接口不能直接new对象)

(4)调用重写的方法

(三)接口中的成员

1.抽象方法

(1)定义格式

public abstract 返回值类型 方法名(形参);

(2)注意

不写public abstract 默认也有

(3)使用

A.定义实现类,实现接口

B.重写抽象方法

C.创建实现类对象,调用重写的方法

2.默认方法

(1)格式:

public default 返回值类型 方法名(形参){

方法体

return 结果

}

(2)使用

A.定义实现类,实现接口

B.默认方法可重写,可不重写

C.创建实现类对象,调用默认方法

3.静态方法

(1)格式

public static 返回值类型 方法名(形参){

方法体

return 结果

}

(2)使用

接口名直接调用

默认方法和静态方法 -> 可以作为临时加的一个小功能

4.成员变量

(1)格式

public static final 数据类型 变量名 = 值

(2)相关知识点:final

final代表最终的,被它修饰的变量,不能二次赋值,可以视为常量

(3)特点

不写public static final默认也有

(4)使用

接口名直接调用

(5)注意

A.被static final修饰的成员变量需要手动赋值

B.习惯上我们会将static final修饰的成员变量名大写

(四)接口的特点

1.接口可以多继承 -> 一个接口可以继承多个接口

public interface InterfaceA extends InterfaceB,InterfaceC{}

2.接口可以多实现 -> 一个实现类可以实现一个或者多个接口

public class InterfaceImp1 implements InterfaceA,InterfaceB{}

3.一个子类可以继承一个父类的同时实现一个或多个接口

public class Zi extends Fu implements InterfaceA,InterfaceB{}

4.注意:

继承也好,实现接口也罢,只要是父类中或者接口的抽象方法,子类或者实现类 都要重写

当一个类实现多个接口时,如果接口中的抽象方法有重名且参数一样的,只需要重 写一次

当一个类实现多个接口时,如果多个接口中默认方法有重名的,且参数一样的,必须 重写一次默认方法

(五)接口和抽象类的区别

相同点:

(1)都位于继承体系的顶端,用于被其他类实现或者继承

(2)都不能new

(3)都包含抽象方法,其子类或者实现类都必须重写这些抽象方法

不同点:

(1)抽象类:一般作为父类使用,可以有成员变量,构造,成员方法,抽象方法等

(2)接口:成员单一,一般抽取接口,抽取的都是方法,视为功能的大集合

(3)类不能多继承,但是接口可以

二.多态

1.面向对象三大特征:封装 继承 多态

2.怎么学:

(1)不要从字面上理解多态两个字,要从使用形式上掌握

(2)要知道多态的好处

(3)要知道多态的前提

(一)多态的介绍

1.前提

(1)必须有子父类继承或者接口实现关系

(2)必须有方法的重写(没有重写,多态没有意义),多态主要玩的是重写方法

(3)new对象:父类引用指向子类对象

Fu fu = new Zi() ->理解为大类型接收了一个小类型的数据 -> double b = 10

2.注意

多态下不能直接调用子类特有功能

(二)多态的基本使用

(三)多态条件下成员的访问特点

1.成员变量

看等号左边是谁,先调用谁的变量

2.成员方法

看new的是谁,就先调用谁的成员方法,子类没有找父类

(四)多态的好处

1.问题描述:

如果使用原始的方式neew对象(等号左右两边一样),既能调用重写的,还能调 用继承的,还能调用自己特有的成员,但是多态方式new对象,只能调用重写的, 不能直接调用子类特有的成员,那为啥还要用多态呢?

2.多态方式和原始方式new对象的优缺点:

原始方式:

(1)优点:既能调用重写的,还能调用父类非私有的,还能调用自己特有的

(2)缺点:扩展性差

多态好处:

(1)优点:扩展性强

Fu fu = new Zi()

double b = 10;

b = 100L;

(2)缺点:不能直接调用子类特有功能

形参传递父类类型,调用此方法父类类型可以接收任意它的子类对象

传递哪个子类对象,就指向哪个子类对象,就调用哪个子类对象重写的方法

(五)多态中的转型

1.向上转型

(1)父类引用指向子类对象

好比是:double b = 1;

2.向下转型

(1)好比是强转,将大类型强转成小类型

(2)表现方式:

父类类型 对象名1 = new 子类对象() -> 向上转型 -> double b = 1

子类类型 对象名2 = (子类类型)对象名1 -> 向下转型 -> int i = (int)b

3.想要调用子类特有功能,需要向下转型

(六)转型可能会出现的问题

1.如果等号两边类型不一致,会出现类型转换异常(ClassCastException)

2.解决:

在向下转型之前,先判断类型

3.怎么判断类型:instanceof

判断结果是boolean型

4.使用:

对象名 instanceof 类型 -> 判断的是关键字前面的对象是否符合关键字后 面的类型

posted @ 2024-09-05 19:47  dededea  阅读(4)  评论(0编辑  收藏  举报