Java--继承父类并实现多个接口、接口之间的多继承、多态的格式和使用、多态中成员变量的使用特点、以及对象的向上转型和向下转型

Java基础—封装继承多态(详细) 面向对象三大特征 封装 继承 多态1.封装定义:就是把事物封装成类,将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。 阅读详情

1.继承父类并实现多个接口

使用接口的时候,需要注意:

1)接口没有静态代码块或者构造方法的。

2)一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。

格式:
public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB{
        //覆盖重写所有抽象方法
}

3)如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。

4)如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。

5)如果实现类所实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。

6)一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法。

//定义接口A
public interface MyInterfaceA {

    // 错误写法,接口没有静态代码块
//    static {
//
//    }
    // 错误写法,接口不能有构造方法
//    public MyInterfaceA();

    public abstract void methodA();

    public abstract void methodAbs();

    public default void methodDefault(){
        System.out.println("默认方法AA");
    }

}
//定义接口B
public interface MyInterfaceB {

    // 错误写法,接口没有静态代码块
//    static {
//
//    }
    // 错误写法,接口不能有构造方法
//    public MyInterfaceA();

    public abstract void methodB();
    public abstract void methodAbs();
    public default void methodDefault(){
        System.out.println("默认方法BB");
    }
}
//定义实现类
public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB {
    @Override
    public void methodA() {
        System.out.println("覆盖重写了A方法");
    }

    @Override
    public void methodAbs() {
        System.out.println("覆盖重写了AB接口都有的抽象方法");
    }

    @Override
    public void methodB() {
        System.out.println("覆盖重写了B方法");

    }

    @Override
    public void methodDefault() {
        System.out.println("对多个接口当中冲突的默认方法进行了覆盖重写");
    }
}
//定义实现类
//如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。
public abstract class MyInterfaceAbstract implements MyInterfaceA,MyInterfaceB {
    @Override
    public void methodA() {
    }

    @Override
    public void methodAbs() {
    }

    @Override
    public void methodDefault() {
    }
}

父类优先于接口

//定义父类
public class Fu {
    public void method(){
        System.out.println("父类方法");
    }
}
//定义接口
public interface MyInterface {
    public default void method(){
        System.out.println("接口的默认方法");
    }
}
//定义子类,继承父类,实现接口
public class Zi extends Fu implements MyInterface {
}
//主程序
public class Demo01Interface {

    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.method();//父类方法
    }
}

2.接口之间的多继承

1)类与类之间是单继承的,直接父类只有一个。

2)类与接口之间是多实现的。一个类可以实现多个接口。

3)接口与接口之间是多继承的。

//定义接口A
public interface MyInterfaceA {

    public abstract void methodA();
    public abstract void methodCommon();
    public default void methodDefault(){
        System.out.println("AAA");
    }
}
//定义接口B
public interface MyInterfaceB {

    public abstract void methodB();
    public abstract void methodCommon();
    public default void methodDefault(){
        System.out.println("BBB");
    }
}
//定义子接口
/*
这子接口当中有几个方法---4个
methodA() 来源于接口A
methodB() 来源于接口B
methodCommon() 来源于接口A和B
method() 来源于自己

 */
public interface MyInterface extends MyInterfaceA,MyInterfaceB {

    public abstract void method();
    @Override
    public default void methodDefault() {

    }
}
//定义接口实现类
public class MyInterfaceImpl implements MyInterface {
    @Override
    public void method() {
    }

    @Override
    public void methodA() {
    }

    @Override
    public void methodB() {
    }

    @Override
    public void methodCommon() {
    }
}

注意事项:

1)多个父接口当中的抽象方法如果重复,没关系。

2)多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写,而且带着default关键字。

3.多态的格式和使用

代码当中体现多态性:其实就是一句话,父类引用指向子类对象。

格式: 父类名称 对象名= new 子类名称();

或者 接口名称名称 对象名= new 实现类名称();

//定义父类
public class Fu {
    public void method(){
        System.out.println("父类方法");
    }
}
//定义子类继承父类
public class Zi extends Fu {
    @Override
    public void method() {
        System.out.println("子类方法");
    }
}
//多态
public class Demo01Multi {

    public static void main(String[] args) {
        //使用多态的写法
        //左侧父类的引用,指向了右侧子类的对象
        Fu obj = new Zi();

        obj.method();
    }
}

4.多态中成员变量的使用特点

访问成员变量的两种方法:

1)直接通过对象名称访问。

2)间接通过成员方法访问。

//定义父类
public class Fu {

    int num = 10;

    public void showNum(){
        System.out.println(num);
    }
    public void method(){
        System.out.println("父类方法");
    }
    public void methodFu(){
        System.out.println("父类特有方法");
    }
}
//定义子类
public class Zi extends Fu {

    int num = 20;
    int age = 16;

    @Override
    public void showNum() {
        System.out.println(num);
    }
    @Override
    public void method() {
        System.out.println("子类方法");
    }
    public void methodZi(){
        System.out.println("子类特有方法");
    }
}
//主程序
public class Demo01MultiField {

    public static void main(String[] args) {
        //使用多态的写法,父类引用指向子类对象
        Fu obj = new Zi();//多态:左边父类,右边子类
        System.out.println(obj.num);//父:10
//        System.out.println(obj.age);//错误写法
        System.out.println("==============");

        obj.showNum();//子类没有覆盖重写,就是父:10
        // 子类覆盖重写就是属于子类,结果为20。
    }
}

在多态的代码当中,成员方法的访问规则: 看new的是谁,就优先用谁,没有则向上找。

口诀:编译看左边,运行看右边。

对比一下:

成员变量:编译看左边,运行看左边。

成员方法:编译看左边,运行看右边。

public class Demo02MultiMethod {
    public static void main(String[] args) {
        Fu obj = new Zi();//多态

        obj.method();//父子都有,优先用子
        obj.methodFu();//子类没有,父类有,向上找到父类

        //编译看左边,左边是Fu,Fu当中没有methodZi方法,所以编译报错
//        obj.methodZi();//错误写法

    }
}

5.对象的向上转型和向下转型

1)对象的向上转型,其实就是多态写法:

格式:父类名称 对象名 = new 子类名称();

含义:右边创建一个子类对象,把它当做父类来看待使用。

注意事项:向上转型一定是安全的。从小范围转向了大范围。

类似于:
double num = 100 ;//正确,int-->double,自动类型转换。
向上转型一定是安全的,正确的,但是也有弊端:
对象一旦向上转型为父类,那么就无法调用子类原本特有的内容。

解决方案:
用对象的向下转型还原。

2)对象的向下转型,其实是一个还原的动作。

格式: 子类名称 对象名 = (子类名称)父类对象;

含有:将父类对象,还原成为本来的子类对象。

类似于: int num = (int) 10.0;//可以
int num =(int) 10.5;//不可以,精度损失
//定义动物类
public abstract class Animal {

    public abstract void eat();
}
//定义猫类
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
    //子类特有方法
    public void catchMouse(){
        System.out.println("猫捉老鼠");
    }
}
//定义狗类
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗吃狗粮");
    }

    public void watchHouse(){
        System.out.println("狗看家");
    }
}
public class Demo01Main {

    public static void main(String[] args) {
        //对象的向上转型,就是:父类引用指向子类对象
        Animal animal = new Cat();//本来创建的时候是一只猫
        animal.eat();//猫吃鱼

//        animal.catchMouse();//错误写法

        //向下转型,进行还原动作
        Cat cat = (Cat) animal;
        cat.catchMouse();//猫捉老鼠

        // 下面是错误的向下转型
        // 本来new的时候就是一只猫,现在非要当成狗
        Dog dog = (Dog) animal;//错误写法,编译不会报错,但是运行会出现异常。
        // 异常:Exception in thread "main" java.lang.ClassCastException,类转换异常

    }
}

封装继承多态 多态意味着“多种形态”,同一个接口或引用可以指向不同类型的对象,使用父类型的对象作为参数,可以接收所有子类对象(这里父类引用具有多种形态)。在运行时根据实际对象类型调用相应的方法。多态分为两种形式,方法重载是编译时多态的例子(静态绑定),而方法重写则是运行时多态的体现(动态绑定)--方法重载是一个类的多态性表现而方法重写是子类与父类的一种多态性表现向上转型实际就是创建一个子类对象,将其当成父类对象来使用。从小范围向大范围的转换语法格式:父类类型 对象名= new子类类型()使用出现的场景。 阅读详情

相关推荐

开源大模型推理GPU资源评估以及优化

随着大模型的火热很多项目中都使用到了开源大模型,这时候准确评估大模型的GPU资源非常重要,主要有下面几个方面:GPU是昂贵的资源。高估内存需求可能导致在硬件上的不必要支出,而低估则可能导致系统故障或性能下降。:适当的内存管理确保模型高效运行,能够更快地响应用户并处理更多并发请求。:随着需求的增长,理解内存需求对于在不牺牲性能或产生高昂成本的情况下扩展服务至关重要。尽管其重要性显而易见,但计算用于服务大型语言模型(LLM)的GPU内存并不简单。

优快云DN的博客 3116

在JAVA中,一个类同时继承且实现时,父类与实现接口存在相同方法名的抽象方法时,如何处理?实现多个接口时,存在相同抽象方法名,如何处理?

先说结论:结论1、当父类和实现的接口之间,存在同名方法时,就近优先实现父类的抽象方法。结论2、当同名方法同时触发重写时,方法的:返回值类型、参数列表完全相同,实现类权限修饰符大于任意父类、接口的权限修饰符时(即:仅权限修饰符满足重载要求时)。可视为方法完全相同。所以:子类一次重写即可,不会报错。结论3、当同名方法触发重写时,参数列表不同、并且权限修饰符满足重载要求时。所以:子类可分别重写这些方法,不会报错。结论4、当同名方法触发重写时,参数列表相同、返回值类型不同、并且权限修饰符满足重载要求时。

Letol的博客 1825

树莓派与无人机协同实战:基于OpenCV的地标识别优化策略

本文深入探讨了基于树莓派与无人机的协同系统,重点分享了利用OpenCV优化地标识别以实现精准降落的实战策略。内容涵盖从应对复杂光照的图像预处理、鲁棒的轮廓几何过滤,到通过ROS进行稳定通信,以及实现分层控制与状态机设计,旨在提升系统在真实环境中的可靠性与性能。

y2z3a4b5c的博客 1086

java用接口实现多态_Java中使用接口实现多继承和多态的方法

一起学习1.JAVA里没有多继承,一个类之能有一个父类。而继承的表现就是多态。一个父类可以有多个子类,而在子类里可以重写父类的方法(例如方法print()),这样每个子类里重写的代码不一样,自然表现形式就不一样。这样用父类的变量去引用不同的子类,在调用这个相同的方法print()的时候得到的结果和表现形式就不一样了,这就是多态,相同的消息(也就是调用相同的方法)会有不同的结果。举例说明://父类p...

weixin_31119281的博客 751

保姆级教程:用Ansys Workbench找出BGA焊点最容易坏的位置(附热循环+振动分析)

本文提供了一份详细的Ansys Workbench教程,指导如何通过热循环和振动分析找出BGA焊点最容易失效的位置。从模型搭建、材料定义到网格划分和载荷设置,全面解析了BGA焊点可靠性分析的全流程,帮助工程师提前预防焊点开裂问题,提升电子封装设计的可靠性。

weixin_30983965的博客 420

从ISCXTor2016到CICIDS2017:手把手教你下载和使用UNB的网络安全数据集

本文详细介绍了UNB大学发布的ISCXTor2016和CICIDS2017等网络安全数据集的下载与使用方法,特别适合加密流量识别和网络行为分析研究。文章提供了多种高效获取路径、文件结构解析及实战分析示例,帮助研究者快速上手这些真实场景捕获的精细标注数据集。

weixin_42524945的博客 632

Java阶段总结-继承&实现接口

继承 和 接口的实现

f20202016的博客 1384

通达信源码-主力建仓-AI投研图灵室出品

AI投研图灵室1:=3*SMA((CLOSE-LLV(LOW,75))/(HHV(HIGH,75)-LLV(LOW,75))*100,20,1)-2*SMA(SMA((CLOSE-LLV(LOW,75))/(HHV(HIGH,75)-LLV(LOW,75))*100,20,1),15,1);AI投研图灵室2W:=100-100*(HHV(HIGH,14)-CLOSE)/(HHV(HIGH,14)-LLV(LOW,14));AI投研图灵室3:=SMA(SMA(AI投研图灵室2,3,1),3,1);

qq_57222058的博客 4389

typeScript--[接口interface的继承]

【代码】typeScript--[接口interface的继承]

逍遥的码农的博客 1200

html python mysql交互_干货!Python与MySQL数据库的交互实战

安装PyMySQL库如果你想要使用python操作MySQL数据库,就必须先要安装pymysql库,这个库的安装很简单,直接使用pip install pymysql;假如这种方式还是安装不上,就用如下链接找一个合适的安装包,进行安装,这个就不细说了。https://www.lfd.uci.edu/~gohlke/pythonlibs/使用Python连接MySQL数据库1)六个常用的连接参数参数...

weixin_31043555的博客 1561

【异常】Nacos 2.x 核心报错:Server check fail (gRPC 端口连不通) 深度排查

如果 Nacos 运行在 K8s 中,需确保对应的Servicemetadata:spec:ports:port: 8848port: 9848 # 必须暴露此端口selector:app: nacos在 Nacos 2.x 时代,“端口成套出现”是基础设施配置的基本要求。遇到连接失败时,首要检查的不是业务配置,而是网络链路上主端口 + 1000的 TCP 通讯是否被放行。更多关于 AI + 教育领域的干货,可以关注我的微信公众号一时间获取哦~

奶爸的编程之路,也就一周冷个三天 325

java接口

语法: 访问权限修饰符 interface 接口名{ }接口中 有什么 1,可以有公共静态常量 接口中的属性默认使用public static final修饰并不能修改2,接口中可以定义公共静态方法3,接口中可以定义公共抽象方法 接口中没有方法体的方法默认使用public abstract修饰公共静态方法}公共抽象方法等同于 void a();4,jdk1.8以后可以在接口中定义使用default修饰的普通方法(了解)...

JOHON1的博客 1201

数据挖掘实战-基于LSTM时间序列模型的香烟销售预测分析

本文介绍了基于LSTM时间序列模型的香烟销售预测分析实验。实验背景为烟草市场竞争激烈,企业需提高销售预测准确性以优化生产、库存和营销策略。LSTM模型因其处理长序列数据的能力被选为预测工具。实验步骤包括数据准备、特征工程、模型构建、训练与评估及结果分析。数据集来自某市门店的销售数据,技术工具为Python 3.9和Jupyter Notebook。实验过程涵盖数据导入、预处理、产品销售与区域销售分析、销售预测(包括销售额、销量、利润及海通店销售额预测)。

m0_64336780的博客 8952

Java接口,多态,向上转型,向下转型的意义

接口 官方解释: Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现 ,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 包含内容: (Java 7)变量,抽象方法 (Java 8)默认方法,静态方法 (Java 9)私有方法 为什么要使用接口? 接口可以解决Java无法多继承的缺陷 定义接口方法 : 关键字为interface public interface USB { //变量 //方法体 } 定义接口类(实现接

m0_45888043的博客 2445

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

JavaSE——继承和多态详解

5000字详解继承和多态

chenchenchencl的博客 1065

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Java SE】继承和多态(保姆级教学)

子类继承了父类的属性和方法,并且可以扩展 ,多态是建立在继承的基础上的,多个不同的子类拥有各自不同的形态,也就是多态,了解继承和多态这也是学好java的前提

书生-w的博客 2万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

匿名对象,接口,接口与抽象类的区别,接口的运用(包括向上和向下转型的运用),接口的特性,接口的多继承问题,接口间的继承,Object类,理解和模拟实现equals和hashcode方法,内部类

匿名对象在往往是一次调用,不同于正常去实例化一个对象,匿名对象的调用只有一次,下次再调用是又创建了一个新的对象。画黑框是匿名对象的实现方式,通过new+类()的形式。红框是正常去实现实例化一个对象,红框的每次调用都是同一个对象去调用,黑框的每次调用是再创建一个新的对象。

ccydeboke的博客 922

Java中的封装、继承、多态

Java继承:子类可使用父类属性和方法。Java封装:保护数据,限制直接访问。Java多态:接口统一,实现多样。

在这里分享自己学习路上的知识、见解 1222

什么是接口 | 接口的特点 | 抽象类和接口的区别 | 接口之间的多继承

接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法(功能),包含抽象方法 (JDK7及以前) , 默认方法和静态方法(JDK8)私有方法(JDK9)。接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。Java中的接口更多的体现在对行为的抽象!接口用关键字interface修饰public interface 接口名 {}​@Override​@Override​@Override​。

DominicT的博客 1073

Java 继承与多态

学会 Java 中的继承与多态,重载和重写又怎么用。

qq_55829345的博客 2010

day08 接口&多态

接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。Java中的接口更多的体现在对行为的抽象!应用场景:为了功能扩展,提高程序的可扩展性。java不支持,多重继承,假设现在有一个需求,就需要继承多个类 的特点?变通方式,接口。坦克:陆地跑 突突船:游泳,滑行;接口用关键字interface修饰public interface 接口名 {}默认方法:使用 default 修饰,不可省略,供子类调用或者子类重写。public default 返回值类型 方法的名称(参数列表){

wsskl的博客 1746

Java基础系列(九)接口、多态

一、接口 1.1 接口的概念     接口是功能的集合,同样可看做是一种数据类型。     接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接

小刺猬 6023

java一个接口多个实现类怎么调用_Java面向对象之:接口、多态

本篇我们将学习面向对象中的接口和多态:第一章:接口1.1-接口概述(了解)什么是接口Java中的接口是 一系列方法的声明 ,是一些 方法特征的集合 。一个接口 只有方法的特征(只有声明) 没有 方法的实现(没有方法体) ,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是 封装了方法,包含抽象方法...

weixin_30616309的博客 6995

Java中类的继承、继承的自动转型以及多态详解

super(超类):表示当前类的父类对象 this:表示当前类的对象。a.保留父类原有的功能:调用父类的方法。b. 重写方法后新添加的功能。

weixin_53622554的博客 2653

Java_多态_抽象类_接口

向下转型用的比较少,而且不安全,万一转换失败,运行时就会抛异常。在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。向下转型:将一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的方法,但有时候可能需要调用子类特有的方法,此时:将父类引用再还原为子类对象即可,即向下转换。在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是一个类可以实现多个接口。

weixin_66484088的博客 1224

多态,抽象,继承的详解及区别

面向对象编程中,多态和抽象是两个核心概念。多态允许父类对象根据赋值的不同子类表现出不同行为,主要通过继承和方法重写实现,提高了代码灵活性。抽象通过抽象类和接口实现,前者可包含部分实现,后者纯定义规范,两者都强制子类实现特定方法并限制直接实例化。多态强调行为的多样性,抽象则关注规范定义。接口支持多重继承,而抽象类更适合"is-a"关系。这些特性使代码更易扩展和维护,符合面向抽象编程的原则。

m0_73128353的博客 1004
上一篇: Java--接口的定义格式、接口的抽象方法定义和使用、接口的默认方法定义和使用、接口的静态方法定义和使用、接口的私有方法调用和使用、接口的常量定义和使用、接口的内容小结
下一篇: Java--instanceof关键字、笔记本接口项目、final关键字、四种权限修饰符
追光的海马
博客等级 码龄6年 4粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值