【Java】java继承的理解和应用

【Java】矩形类Rectangle (1)自定义一个矩形类(Rectangle),包含的私有属性有:长(length),宽(width),包含的方法有:关于属性的setter和getter方法,即setLength,getLength,setWidth,getWidth,计算矩形面积的方法(getArea)。正方形类(Square),包含的属性边长(side_length),和setSide(float side_length)方法(去调用矩形类setLength,setWidth,让长和宽都等于边长)。 阅读详情

重要声明:本文章仅仅代表了作者个人对此观点的理解和表述。读者请查阅时持自己的意见进行讨论。

本文更新不及时,请至原文地址查看:【Java】java继承的理解和应用。

继承这一特性在Java中的应用十分广泛,几乎任意一个项目甚至demo代码片段里,也可以见到java继承的身影。因此有关继承相关的知识点也必然是学习java编程必须要掌握的。在了解继承之前,你需要对 java中的类 有一定的认识,否则可能本文阅读相对困难。

一、继承的作用

学习一个新事物前,往往都会有一个疑问。这是一个什么样的东西以至于我们要去学习它。它又能为我们带来什么样的便利呢?

在大多数的资料里,几乎都把java中的继承比喻为现实世界里,你和你父母的关系那样。不得不说的的却却没有问题。但是似乎总有一点差强人意。假如你父亲是一位成功的商人,可你不一定是;假如你母亲是一位著名的画家,你也不一定是画家!在别人的眼里,你顶多是成功商人的儿子、是著名画家的女儿。但你不是他们,你也不一定能做到他们那样。

而在程序里,不一样。程序里所说的继承,是指“类”之间的继承。而现实里,并不存在“类”相关的继承的说话(不杠应该就没有吧[滑稽保命])。你父亲是一个对象,你是一个对象,你们都是“人类”这个类的实例。这也许就是程序里的继承与现实中的继承的区别了。

程序中的类,通常是指:对一种有相共通的属性和行为功能的实例进行一个抽象描述。描述方式则通过class来定义。当你定义好了之后,便可通过这个定义的规则来构造具有相同或相似功能的不同对象了。

程序是人写的,不可能一开始就明白一个程序将来会遇到什么样的功能和需求。因此程序是不断去完善的。有一天突然要求添加一个功能,但此功能的绝大部分和已有功能模块相同,仅仅只有一部分扩展的新功能。这时候,如果之前程序设计得当,便可以十分方便的通过继承来实现新功能需求了。

简单来说,java程序里的继承是“类”与“类”进行继承。对象与对象之间不存在继不继承的关系。子类可以使用父类提供的非私有方法。

“父类”又有人叫:基类、超类。

二、使用继承

要最终明白参透继承,使用动物阿猫、阿狗,人类老师、学生,这类具体事务进行类比。会把人带入死胡同,会感觉: 合着我在这儿继来继去,就只是print了一堆name和age?到底继承干了啥、带来了啥。没感觉!

1、创建第一个类

所以我将通过具体功能需求来演示使用继承为我们开发带来的便利。请看下面定义的一个类:

// Rectangle.java
public class Rectangle {
    public float sideLength1;
    public float sideLength2;

    public Rectangle (float sideLength1, float sideLength2){
        this.sideLength1 = sideLength1;
        this.sideLength2 = sideLength2;
    }

    public float calcArea(){
        return sideLength1 * sideLength2;
    }
}

很明显,这是一个矩形类,sideLength 表示了矩形的边长,矩形有四边,但对边相等,因此只需要定义两边的变量来保存数据就好了。构造函数要求了必须传入两个边长来创建对象。同时,提供了一个方法 calcArea 计算这个矩形的面积,并返回结果。这个类十分简单,相信每一个有心学习java的人都能够看懂。

不如先来看看如果使用它,实现面积的计算:

// Demo.java
public class Demo {
    public static void main(String[] args) {
        Rectangle rect1 = new Rectangle(12.24f, 3.15f);
        float rect1Area = rect1.calcArea();
        System.out.println("矩形的面积是:" + rect1Area);
    }
}

构造矩形,计算面积,输出结果。很是easy。那么现在新需求来了。请开发一个类,实现立方体的体积计算。

2、继承第一个类

要实现立方体体积计算,数学公式:体积=底面积×高。而我们第一个类的矩形面积计算已经是实现好了,有现成的了,那我们的体积计算还需要再写一遍面积计算的代码吗?既然我们有这样的实现,何不直接利用呢?继承的有用之处就体现出来了,开始继承实现:

// Cuboid.java
public class Cuboid extends Rectangle {
    public float sideLength3;

    public Cuboid (float sideLength1, float sideLength2, float sideLength3) {
        super(sideLength1, sideLength2);
        this.sideLength3 = sideLength3;
    }

    public float calcVolume() {
        return super.calcArea() * sideLength3;
    }
}

由于立方体存在第三条边长,因此在矩形的基础上,只需要再多定义一个参数用来保存第三条边长的值就好了。提示提供了一个 calcVolume 方法用于计算体积。可以看到,在方法内部,直接使用了父类(矩形类)实现好的计算面积方法,然后再乘以第三条边长,就计算出了体积。

立方体(Cuboid)类的构造函数注意

可以看到,子类构造函数里面使用了一句:super(int,int)。它的作用就是将调用父类的构造函数,将父类的值得到初始化。为什么要这样做?要弄明白这件事,可以由另一件事推导出来。首先,你肯定知道并对这句话没有疑问:“子类继承了父类,那么子类就可以使用父类里面所有的非私有方法”。既然能使用,那么肯定父类就离不开正常初始化这样一个操作流程。而这里我们的 Rectangle 类有且只有一个构造函数,子类继承它,要想 Rectangle 正常初始化,并且子类能够顺利使用得到希望的结果,那就必须要在构造子类时先将父类初始化完毕,这也是为什么必须保证调用父类构造函数的位置必须是构造函数第一行。因为你有可能第二行就要使用父类里的方法,不调用父类的构造函数又如何正常的使用呢。

另外,父类如果存在没有参数的构造函数(或者没有写构造函数),那么子类就可以不需要在代码里调用父类的构造函数(但不代表系统不会调用)。在初始化子类的过程中,也依然会先调用父类的构造函数去初始化父类。你要明白,父类也是人写的,根据这些特性,写父类的人知道自己的类如何使用才能正常,他会明确指定构造函数有没有参数的。当使用者使用父类时,不必与原作者沟通即可知道父类的使用方式。也正是因为这一套规矩的作用。

现在,不妨试试,使用 Cuboid 类来进行一次体积计算:

// Demo.java
public class Demo {
    public static void main(String[] args) {
        Cuboid cubo1 = new Cuboid(12.24f, 3.15f, 4.3f);
        float cubo1Volu = cubo1.calcVolume();
        System.out.println("立方体的体积是:" + cubo1Volu);
    }
}

这就是继承。使用现有实现了某功能的类作为父类,在此基础上再实现自己需要的功能。达到重用、扩展功能的效果。

3、重写

重写:是指子类和父类有相同名字,相同参数个数的方法,我们就说子类的这个方法重写了父类的对应方法。上文我们创建了 Rectangle 类,他可以计算矩形面积。现在我们希望它计算正方形的面积,虽然目前来看,它可以实现。但人们对于正方形的感知是只需要一个参数,而 Rectangle 需要两个参数。因此,我们不妨将其简化一下:

// Square.java
public class Square extends Rectangle {
    public Square(float size) {
        super(size, size);
    }

    @Overide
    public float calcArea() {
        return Math.pow(super.sideLength1, 2);
    }
}

@Overide 注解是可选项,它的作用标记了此方法重写了父类的 calcArea 方法,其作用更多是告诉阅读代码的人,这个方法重写了父类的方法。由于我们都知道正方形只需要提供一个长度即可,因此 Square 构造函数只需要传入一个参数。而父类 Rectangle 构造函数明确要求传递两个参数,既然正方形两边相同长,因此可以直接将 size 同时传递给父类构造函数,这没有什么问题,并且是很常见的做法。

再往下看,可以看到子类里也有一个和父类相同的 calcArea 方法,我们开发 Square 时,认为父类计算面积的方式欠佳,希望使用自己的逻辑来计算正方形的面积。方法中使用了 Math.pow() 方法来计算面积,直接使用熟知的数学公式:正方形面积=边长的平方。这样当我们构造正方形时,再调用 calcArea () 方法,就不再使用父类的方法了,而是使用咱们重写的方法了。

当然,你认为父类计算面积的方法十分棒,而你又想在计算面积时额外新增一些其他功能,比如:输出正方形的周长。那么你可以这样:

// Square#calcArea();
@Overide
public float calcArea() {
    float result = super.calcArea(); // 先使用父类实现好的方法得到面积。

    // 输出正方形的周长。
    System.out.println("正方形的周长为:" + (super.sideLength1 * 4));

    // 将面积结果返回。
    return result;
}

上述代码,旨在告诉你,你可以重写父类的方法,并且你还可以在你的方法里面调用父类的这个方法来为你达到前一步已达到的功能,然后再在此基础上实现你更多的扩展功能。上方代码的扩展功能就是在计算了面积的同时还打印了正方形的周长。周长和面积始终是两个不同的东西,同时出现计算面积方法里显得不妥。那么我们可以进一步优化 Square 类,来完成周长和面积的分别计算。

// Square.java
public class Square extends Rectangle {
    public Square(float size) {
        super(size, size);
    }

    @Overide
    public float calcArea() {
        return Math.pow(super.sideLength1, 2);
    }

    public float roundLength() {
        return super.sideLength1 * 4;
    }
}

新增了一个方法 roundLength ,用它来计算正方形的周长。这是只有 Square 正方形类才有的方法。父类没有这个方法。 不如先来测试一下:

// Demo.java
public class Demo {
    public static void main(String []args) {
        Square squ1 = new Square(7.24f);
        float squ1RoundLength = squ1.roundLength();
        System.out.println("正方形的面积是:" + squ1RoundLength);
    }
}

运行程序,正常输出结果。下面我们再来看看另一个在继承中值得关注的问题“引用”问题。

三、父类引用子类

“父类引用子类”。其实不应该这样命名,这是极其不规范、甚至不是很正确的。但它或许又表达了这一个知识点的大意。在程序里,我们经常使用父类的应用去保存一个具体子类的实例。实际上,只要类A 是B、C、D、E类的父类甚至好几级之上的父类,那么这些所有子类的实例对象都可以通过A类创建一个引用字段去保存。比如下面这样:

// Demo.java
public class Demo {
    public static void main(String[] args) {
        Rectangle shape1 = new Square();
        Rectangle shape2 = new Cuboid();
    }
}

这是没有任何问题的。上述代码中, 等号左边,我们可以描述为:父类创建的引用。等号右边,具体子类实例化对象。通过等号,将实例对象使用父类进行引用。这和所有引用类似,把对象的内存地址保存在了 shape1、shape2 这两个字段里面。它们永远都是new的时候对应的类的对象。至于为什么能把子类的引用赋值给父类创建的引用字段呢?

你需要思考。这件事也和“子类可以使用父类所有非私有的方法”有关系。且看我给你一个描述:子类继承了父类,那么子类就必定拥有了父类拥有的方法,所以父类引用保存了子类实例时,能够使用的方法只能是父类里提供的方法,而这个子类实例的对象又必然拥有这些方法。无论如何,都可以正确调用而不会出现找不到的问题。

反过来则不可以

很显然,子类可以自己新增很多自己的方法,父类并没有这些方法,如果反过来引用,则可以调起子类方法,但父类对象并没有这些方法。不行不行。

关于强制转换

对于基本变量,int a = (int)2.3f。这样的强制转换你应该非常熟悉了。现在,对象也可以强制转换了。实际上,只是做了一个引用类型转换。具体实例还是那个不变的实例。就像下面这样:

// Demo.java
public class Demo {
    public static void main(String[] args) {
        Rectangle shape1 = new Square();
        Square square = (Square)shape1;
    }
}

你看到上述代码时可能会表示很白痴。因为你看到了实例创建的时候本来就是一个 Square ,最后你又强制转换成 Square,意义何在?先撇开它的意义,先梳理一下,首先建立一个对象并将其赋值给 Rectangle 父类引用。当你使用父类引用时,在代码里只能显示的调用父类里的方法,当你希望调用 Square 自己的方法时,就办不到了。不过幸好,你有强制转换。转换了啥?其实就只将引用类型进行了转化,从父类引用转化为了子类引用。

注意了,这样的强制转换只能在你知道它具体是哪一个子类时才能进行。否则强制转换将报错的。通过 instanceof 语句,可以判断某个对象是否是某个类的实例:

if (shape1 instanceof Square) {
    System.out.println("shape1是一个正方形。");
}

四、Object

在java里,Object类是所有类的父类,意味着,不论什么对象,你都可以使用 Object 来创建引用进行传递。

五、其它项

要注意,继承只能继承一个父类,不可以继承多个父类。如果你的类担心别人继承。你可以将类定义为final的:

// Test.java
public final class Test {
    // 使用 final 修饰的类,是不允许被继承的。
}

有时候,你希望别人继承你的类,但你不希望其中某一个方法被重写。你也可以使用final修饰:

// Test.java
public class Test {

    // 使用final修饰的方法不能被重写。
    public final void function1 () {
        // todo...
    }
}
SPSS实战:如何用Harman单因素检验搞定共同方法偏差(附完整操作步骤) 本文提供了一份详尽的SPSS实战指南,手把手教你运用Harman单因素检验来诊断共同方法偏差。文章从核心概念讲起,逐步详解数据准备、SPSS操作步骤、结果解读与报告撰写,帮助研究者快速掌握这一关键的数据质量控制方法,确保量化研究结论的可靠性。 阅读详情

相关推荐

基于多智能体深度强化学习的空地协同通信系统轨迹设计与访问控制

所属子方向: UAV assisted communication 名词注释 coordinated:协调、协同 base stations 基站,公用移动通信基站,是移动设备接入互联网的接口设备,是指在一定的无线电覆盖区中,通过移动通信交换中心,与移动电话终端之间进行信息传递的无线电收发信电台。 UAV-BS:无人机基站 cooperative-competitive game:合作竞争博弈 throughput :吞吐量,每秒比特数 bps,bits per second Determinis

skysys的研究小屋 4969

Java 类的继承

题目 1.新建Triangle.java程序:定义图形类(Shape)的子类三角形类(Triangle),分别计算其面积及周长。 提示:三角形面积S,三条边为a、b、cp=(a+b+c)/2)S=sqrt[p(p-a)(p-b)(p-c)] 2.新建Rectangle.java程序:定义图形类(Shape)的子类矩形类(Rectangle),分别计算其面积及周长。 3.新建Circle.java程序:定义图形类(Shape)的子类圆形类(Circle),分别计算其面积及周长。

m0_56353810的博客 2210

基于R语言的现代贝叶斯统计学方法(贝叶斯参数估计、贝叶斯回归、贝叶斯计算)实践

贝叶斯统计学是一门基本思想与传统基于频率思想的统计学完全不同的统计学方法;它以其灵活性和先进性在现代的统计学中占据着重要的地位。贝叶斯统计学是开展科学研究不可缺少的重要手段,但是,因为其思想、技术和方法都与传统统计学有着较大区别;且其计算中涉及马尔科夫、蒙特卡罗和吉布斯采样等现代计算方法,对使用者经验和能力构成了很大的挑战。

AAIshangyanxiu的博客 679

17.封装—定义正方体类

乎乎学习了面向对象程序设计,他看到以下正方体类(Cube)的声明程序,请帮他实现该类。并在main函数中完成以下应用,通过输入长宽高创建一个正方体对象c1, 并用c1通过拷贝构造函数创建c2,c2的长宽高分别为c1长宽高的十分之一,然后通过指向c2的指针p调用成员函数输出c2对象的相关信息,详见输出样例。

2301_80432823的博客 203

B0505S选型

    使用B0505S-1W已经有一段时间了,一直以来使用的是下面的电路,该电路摘自《CAN总线嵌入式开发——从入门到实战》一书。 参考金升阳的用户手册,手册上写道: 为了确保该模块能够高效可靠的工作,使用时,其输出最小负载不能小于额定负载的10%。若您所需功率确实较小,请在输出端并联一个电阻(电阻消耗功率与实际使用功率之和大于等于10%的额定功率)        由于使用该电源模...

动感小麦兜的博客 1万+

数据库存储分层架构搭建:热数据 SSD 存储、冷数据归档的配置操作及性能对比分析

本文探讨了数据库存储分层架构的优化策略。随着数据量激增,传统单一存储模式面临成本与性能的平衡难题。文章提出通过热数据SSD加速和冷数据归档降本的分层方案,系统分析了热数据SSD配置、冷数据归档操作及性能对比。分层架构基于数据活跃度匹配存储介质,使热数据保持高性能访问,冷数据低成本存储,实现总体成本降低60%-80%的同时确保核心查询性能。文中详细介绍了硬件选型、数据库配置、数据迁移等技术细节,并强调了动态调整分层策略的重要性,为构建高效经济的数据库存储体系提供了完整解决方案。

jingjing45678的博客 1291

十九、继承(二)通过继承 进行扩展

继承这种思想  常常  用来对  一类物件  进行扩展。现在  我  在objective-c当中  创建  一类叫Rectangle的物件  来代表  长方形这类事物,就像  下面这样: 文件Rectangle.h: 文件Rectangle.m: 通过Rectangle.h  和  Rectangle.m这两个文件  我  创建了  Rectangle这类物件。

Alex1226的专栏 351

单细胞测序流程(五)t-sne聚类分析和寻找marker基因

系列文章目录 单细胞测序流程(一)简介与数据下载 单细胞测序流程(二)数据整理 单细胞测序流程(三)质控和数据过滤——Seurat包分析,小提琴图和基因离差散点图 单细胞测序流程(四)主成分分析——PCA 本期主讲内容——t-sne聚类分析和寻找marker基因 介绍:T-SNE是一种用于探索高维数据的非线性降维算法。它将多维数据映射到适合于人类观察的两个或多个维度。 一、课前准备 之前所使用的数据 R语言的IDE 二、过程 聚类分析的目的是根据细胞的差别所进行细胞分群,两个..

qq_45478665的博客 2万+

定义Square类和Rectangle类是Shape类的子类,Cuboid类是Rectangle类的子类,并完成要求

各类的继承关系为:Square类和Rectangle类是Shape类的子类,Cuboid类是Rectangle类的子类。然后定义Cuboid类的volume()方法等,并新建相应的对象实例测试之。 要求: 定义一个名为Square的类表示正方形,使其继承Shape抽象类,覆盖Shape类中 的抽象方法getPerimeter(和getAreaO. 编写程序测试Square类的使用。 定义一个名为C...

weixin_43786637的博客 4448

SAP 交货成本(运费)

交货成本: 业务场景: 有些产品或供应商,会产生交货成本(运费、关税等) 业务模拟(以运费为例): 1、运费在采购订单体现:计划运费 ME21N创建采购订单,并且包含运费: MIGO收货时: 由上可知,MIGO时运费最终体现在库存(存货)科目中(V),或者价格差异中(S计价时)。 MIRO发票校验: 运费最终体现在单独科目中: 后台配置: 运费在发票时候...

willieyuan的博客 1万+

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

Robot_PLC_HMI_Automation 1万+

编程自学指南:java程序设计开发,继承的基本概念和语法,super 关键字的使用,方法重写的规则和应用,理解继承中的多态性

编程自学指南:java程序设计开发,继承的基本概念和语法,super 关键字的使用,方法重写的规则和应用,理解继承中的多态性

zl515035644的博客 848

华为od 面试八股文_Spring_03_含答案

控制反转IOC是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:依赖注入和依赖查找依赖注入;

MISAYAONE的博客 2341

java继承(详细)

java继承 1.什么是继承 是一种java的机制,子类可以继承父类的所有属性和方法;当子类继承父类时。可以重复使用父类中的属性和方法,也可以添加新的属性和方法, 示例 class B{ …… } } class A extends B{ …… } } extends关键字用于继承,中文意思延伸,可以理解为,class A extends B;表示A 是B的延伸 ...

weixin_44221079的博客 4225

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

Java继承机制

Java继承机制 继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。 Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同...

weixin_41924879的博客 2701

jre9下载 jdk9

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

Java中类的继承(详解)

(2)、如果子类没有定义构造方法,则它将继承父类无参构造的构造方法作为自己的构造方法;如果子类定义了构造方法,则在创建子类对象时,将先执行来自继承父类的无参构造方法,在执行自己的构造方法。如果子类声明了与继承父类同名变量,那么父类的这个变量在子类将不负存在,此时称子类变量隐藏了父类的变量。如果子类重写了从父类继承的方法,那么父类的这个方法在子类将不负存在,此时称子类方法覆盖了父类的方法。通过继承和调用父类的构造方法,我们可以在子类中实现属性的初始化,减少复写、提高代码的利用利用率。

weixin_60625208的博客 2287

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java继承

一、概念 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 1.1 格式 在Java中通过extends关键字可以申明一个类是从另外一个类继承而来的,一般形式如下: class 父类 { } class 子类 extends 父类 { } 1.2 继承类型 Java不支持多继承,但是支持多重继承 二、继承的特性 子类拥有父类的非private的属性、方法 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展 子类可以

kking_edc的博客 591

Java继承和多态

文章目录本章学习要点Java类的封装例 1Java封装图书信息类Java继承(extends)简明教程例 1单继承继承的优缺点Java super关键字详解super调用父类构造方法例1例2super访问父类成员super调用成员属性super调用成员方法super和this的区别例 3Java对象类型转换:向上转型和向下转型1)向上转型2)向下转型例 1强制对象类型转换Java中为什么使用向上转型而不直接创建子类对象?例 1Java方法重载例 1Java方法重写例 1Java多态性:Java什么是多态?例

qq_41854911的博客 1465

Java继承与多态:深入理解继承、组合和多态的精髓!

欢迎来到这篇关于Java继承与多态的博客!在Java编程中,继承与多态是两个非常重要的概念,它们为我们构建灵活而高效的代码提供了强大的支持。本文将深入探讨Java继承与多态的原理、语法和实践,帮助读者更好地理解和应用这两个概念。

qq_60104186的博客 1060

java继承,java中的方法重写

继承 1 概述 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。 其中,多个类可以称为子类,单独那一个类称为父类、超类(superclass)或者基类。 定义:继承就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。 好处:1. 提高代码的复用性。2. 类与类之...

Gebo的博客 491

JAVA继承、接口、多态

先来张菜鸟教程上找到的图方便理解: 文章目录(一)继承1.概念:2.简单举例:3.继承的作用4.继承类型5.继承特性与相关使用规则6.Java 重写(Override)与重载(Overload)(1) 重写(2)重载(二) 接口1.定义:2.接口特性:3.接口与其它的比较(1)接口与类的比较(2)接口与抽象类的比较(3)接口与继承的比较4.接口的继承(三)多态1.定义:2.多态的优点:3.多态存...

洺润Star的博客 2441

Java是单继承的?

而接口在继承的时候,是想拥有父接口定义的规范,而默认方法更多的是描述本接口的特有功能,所以在继承的时候重写默认方法更加符合Java对于接口的定义。后来,经过翻阅大量资料(说到底就是问度娘呗),终于确认了:Java是单继承的不假,但指的是类是单继承的,而接口是多继承、多实现的。但是,既然Java接口的默认方法可以通过重写来解决多继承问题,那么为什么Java的多继承问题不能通过重写方法来解决呢?Java类的多继承问题不能用重写方法来解决,为什么Java接口的默认方法却能用重写来解决呢?我给他多继承行不行?

Huangjiazhen711的博客 1537

JAVA extends继承

一、继承的概念 继承是面向对象的一个显著特性。继承是从已有的类中派生出的新类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。 二、语法格式 class 子类 extends 父类 {} 子类又称为派生类; 父类又被称为超类(Super Class)。 三、例子 class A { private String name; public void setName(Strin...

江江呀 552

Java 继承(扩展)

什么是继承?extends 其实是扩展的意思继承是类与类之间的一种关系,对某一批类中共有的方法和属性进行共性抽取,抽取出来的这个类也就是被继承的类称之为:父类 / 基类 / 超类;继承的类称之为:子类 / 派生类为什么要使用继承?(或者说使用继承解决了什么问题?提高代码复用率继承是多态的前提,没有继承即没有多态。继承设计规范子类们相同特征(共性属性、共性方法)放在父类中定义,子类独有的属性和行为应该定义在子类自己里面。为什么这样做?

我的博客 1264

Java 的继承举例与详解

Java 的继承举例与解释 类的继承是将现有类作为父类派生出新的子类;通过类的继承可以实现以最少的代码快 速创建新类的目的,即可以提高代码复用率。 1. 类的继承 继承是面向对象程序设计的三大特征之一(封装、继承、多态),被继承的类称为父类 或超类,由继承而得到的类称为子类。 一个父类可以有多个子类,但一个子类只能拥有一个父类,这有点像层次结构。 子类可以自动拥有其父类允许被继承的所有成员,同时子类可以重写或添加自己独有的 成员变量和成员方法。 Java中,所有类都是java.lang.Object的直接或

kaszxc的博客 2843

Java面向对象(oop)继承特性,代码讲解

** * 标题:Java面向对象(oop)继承特性 * 作者:Nstar * 时间:2020年3月8日 * 内容: * 问:什么是Java面向对象继承特性? * 答:1.Java继承关系有点像动物继关系,所有狗的品种继承于犬科 * 2.首先我们要有一个类作为基类,我们也可以将基类称为父类,之后编写的类都可以继承基类 * 3.子类继承父类的时候,这个子类可以拥有父类的一切...

Nstar的技术博客 3642
上一篇: 【JQuery】JQuery常用方法总结、大全。
下一篇: 超详细的实现下载功能教程,文件下载实现。
Microanswer
博客等级 码龄10年 38粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值