欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 【进阶篇-Day2:JAVA包、抽象类、接口、多态】

【进阶篇-Day2:JAVA包、抽象类、接口、多态】

2025/2/7 12:49:42 来源:https://blog.csdn.net/weixin_45901519/article/details/139352566  浏览:    关键词:【进阶篇-Day2:JAVA包、抽象类、接口、多态】

目录

  • 1、包
  • 2、抽象类
    • 2.1 抽象类的定义
    • 2.2 抽象类的注意事项
    • 2.3 abstract关键字的冲突
  • 3、接口
    • 3.1 接口的介绍
    • 3.2 接口中的成员特点
      • 3.2.1 接口中的成员特点
      • 3.2.2 类和接口之间的各种关系
    • 3.3 抽象类和接口的对比
  • 4、多态
    • 4.1 多态的介绍
    • 4.2 多态的前提
    • 4.3 多态的成员访问特点
    • 4.4 多态的好处和弊端
    • 4.5 多态中的转型
  • 5、练习

1、包

在这里插入图片描述

2、抽象类

2.1 抽象类的定义

在这里插入图片描述

下面是抽象类及抽象方法的例子:
在这里插入图片描述

定义格式:
在这里插入图片描述

2.2 抽象类的注意事项

在这里插入图片描述

2.3 abstract关键字的冲突

在这里插入图片描述

3、接口

3.1 接口的介绍

在这里插入图片描述

在这里插入图片描述

注:(1)
在这里插入图片描述在这里插入图片描述
(2)其实接口类似于只有抽象方法的抽象类,但是通常我们把类和接口的关系:叫做实现接口,而把抽象类和类的关系:叫做继承关系。因此一个类既可以实现接口,同时也可以继承抽象类,如下所示:

public class AbstractA {
}interface InterfaceB{}public class C extends AbstractA implements InterfaceB {}

3.2 接口中的成员特点

3.2.1 接口中的成员特点

在这里插入图片描述

3.2.2 类和接口之间的各种关系

(1)
在这里插入图片描述

(2)
在这里插入图片描述

interface A{void show();
}interface B{void show();
}class Fu{public void show(){System.out.println("show......");}
}class Zi extends Fu implements A, B{}

(3)在这里插入图片描述

interface InterA{void showA();
}interface InterB{void showB();
}interface InterC extends InterA, InterB{void showC();
}class InterCImpl implements InterC{@Overridepublic void showA() {}@Overridepublic void showB() {}@Overridepublic void showC() {}
}

3.3 抽象类和接口的对比

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4、多态

4.1 多态的介绍

在这里插入图片描述

从上面的例子可以看出,对于同一个引用数据类型(左边),可以new不同的对象(右边)。因此我就有下面的两个疑问:
在这里插入图片描述
针对上述两个问题,在4.2进行回答。

4.2 多态的前提

对于上述的两个问题,需要有下面的前提才可以实现左右类型不一致时,可以创建对象,并调用同一套方法:
在这里插入图片描述

有了上述的前提后,就可以实现多态了,多态会有两种表现形式:
在这里插入图片描述

4.3 多态的成员访问特点

在这里插入图片描述

注:
对于成员方法,在编译的时候,会检查父类中有没有这个方法:

  • 1、没有:编译报错
  • 2、有:编译通过,但是运行的时候,一定会执行子类的方法逻辑

原因:担心调用的方法,在父类中是一个抽象方法。

  • 这里还有个问题,那如果多态创建对象,调用静态成员,会是什么样呢?

答:结论是会调用父类的中的静态成员。

原因:静态的成员,可以使用对象名调用,但这是一种假象,因为在生成字节码文件后,会自动将对象名调用,改成类名调用。因此会调用父类中的静态成员。

注:因此,静态的成员,推荐类名进行调用。

4.4 多态的好处和弊端

在这里插入图片描述
在这里插入图片描述

那面对这种弊端,java是怎么解决的呢,可以使用多态的转型,下面接着看。

4.5 多态中的转型

在这里插入图片描述

其实就是将父类型,强转为子类型。

在这里插入图片描述

解决方法是,使用instanceof关键字:
在这里插入图片描述

5、练习

在这里插入图片描述

import com.itheima.service.Pay;
import com.itheima.service.impl.BankPayImpl;
import com.itheima.service.impl.CreditCardPayImpl;
import com.itheima.service.impl.PlatformPayImpl;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);Pay pay = null;lo:while (true){System.out.println("请选择支付方式:1、支付平台支付;2、银行卡网银支付;3、信用卡快捷支付");String payMethod = sc.next();switch (payMethod){case "1":pay = new PlatformPayImpl();break lo;case "2":pay = new BankPayImpl();break lo;case "3":pay = new CreditCardPayImpl();break lo;default:System.out.println("您的输入有误,请重新输入!");break;}}System.out.println("请输入您的支付金额:");double payAmount = sc.nextDouble();pay.pay(payAmount);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com