Java:继承与多态

文章目录

  • 一、继承
    • [1.1 什么是继承](#1.1 什么是继承)
    • [1.2 继承的语法](#1.2 继承的语法)
    • [1.3 代码演示:构建一个继承体系](#1.3 代码演示:构建一个继承体系)
  • 二、多态
    • [2.1 什么是多态](#2.1 什么是多态)
    • [2.2 多态的语法](#2.2 多态的语法)
    • [2.3 多态的代码演示](#2.3 多态的代码演示)
  • 三、总结
  • END

鸡汤:
● 当你第三次检查同一段代码,依然觉得它完美无缺时,请相信,那个BUG就站在你屏幕后面,嘲笑你的自信。它不是灵异事件,只是你的大脑开启了'选择性眼瞎'模式。去泡杯咖啡,或者给同事讲一遍你的代码,BUG会自己羞愤而死的。
● 不要瞧不起Ctrl+C/Ctrl+V。站在巨人的肩膀上,不就是复制牛顿的力学定律吗?关键是,你要知道该复制谁,以及粘贴后如何改造。无脑的粘贴是'技术债',有脑的粘贴叫'优秀开源项目复用'。

一、继承

1.1 什么是继承

如果我用两个类来描述我家的猫和狗,我发现了猫和狗都有吃和睡的行为(在类里就是两个方法)但是我们说明明是相同的行为却在两个类的两段代码,维护起来太麻烦了。

而我们想将他们所共有的行为(方法)提取出来构成一个父类,再将这个父类和它的子类创建一种关联关系,使得子类自然就拥有父类的行为(方法),这个关联关系就叫继承。而继承就是"is - a"的关系。

1.2 继承的语法

关键字 extends

语法:

java 复制代码
Class A(子类名) extends B(父类名)

使用 extends 关键字将 A 和 B 建立继承关系

猫和狗的例子
猫、狗继承自动物。动物共有的属性(名字、年龄)和行为(吃饭、睡觉)不需要在猫、狗里重复定义。

1.3 代码演示:构建一个继承体系

首先我们先定义一个猫和狗的父类,Animal(动物)类

java 复制代码
class Animal {
    public void run() {
        System.out.println("跑~~");
    }
}

Animal类 这里只有一个 run 方法

在创建一个 Cat 类和 Dog 类

java 复制代码
class Cat extends Animal {

}

class Dog extends Animal {

}

首先,我们看见 Cat类和 Dog类里没有任何的元素!

让我们运行下面的代码:

java 复制代码
public class demo extends Animal{
    public static void main(String[] args) {
        Cat cat = new Cat();
        Dog dog = new Dog();
        cat.run();
        dog.run();
    }
}

结果:

既然有结果,说明我们的 Cat 类和 Dog 类里应该是有这里的 run方法的. 这个 run方法就是继承于 Anmial类的

二、多态

2.1 什么是多态

我们还是上面的例子,猫和狗都有相同的行为,所以猫和狗可以继承Anmial类来获取来自于父类的方法,但是比如"叫"这个行为,猫和狗是一样的吗?显然是不一样的。那我们怎么解决呢,这里就要引入多态的概念了!

通俗的讲:多态就是同一种行为由不同对象去做而产生不一样的效果

2.2 多态的语法

多态的核心机制就是重载(Overload)与重写(Override),这里我们主要介绍重写(Override)

实现多态需要三个条件:
● 子类继承于父类
● 子类重写父类方法
● 父类引用指向子类对象(向上转型)

注:IDE的@Override是一个很有用的功能.

2.3 多态的代码演示

说再多也不如看一遍代码演示:
首先在 Animal 类里写一个 eat 方法

java 复制代码
class Animal {
    public void eat() {
        System.out.println("在吃饭~~");
    }
    public void run() {
        System.out.println("跑~~");
    }
}

先看一看没有重写 eat 方法的结果,运行一下

显然就是直接调用了父类的 eat 方法,那我们再修改一下 Cat 类和 Dog 类的代码

java 复制代码
class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("小猫在吃猫粮~~");
    }
}

class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("小狗在吃狗粮~~");
    }
}

让我们再看一看结果

我们可以看到这里的结果就是我们重写的 eat 方法
其实这里就是触发了"动态绑定",JVM会检查子类有没有重写调用的方法,如果没有则调用父类的方法,如果重写了方法则调用子类自己的方法.

三、总结

总而言之,掌握继承与多态,意味着你开始从"代码的搬运工"向"程序的设计者"转变。继承让我们的代码站在巨人的肩膀上,而多态则让代码拥有了面向未来的弹性。


END

最后的总结不会写😥
AI写的,我会继续进步,争取早日自己写☄️
写的第十七篇,感谢大家的观看!

相关推荐
秦苒&1 分钟前
【C语言指针四】数组指针变量、二维数组传参本质、函数指针变量、函数指针数组
c语言·开发语言·c++·c#
秋雨雁南飞3 分钟前
C# 字符串占位
开发语言·c#
拾贰_C3 分钟前
[Python | pytorch | torchvision ] models like ResNet... 命名变量说明
开发语言·pytorch·python
傅里叶的耶3 分钟前
C++ Primer Plus(第6版):第三章 处理数据
开发语言·c++
5 分钟前
TIDB——PD(placement Driver)
java·数据库·分布式·tidb·
TG:@yunlaoda360 云老大6 分钟前
配置华为云国际站代理商OBS跨区域复制时,如何编辑委托信任策略?
java·前端·华为云
计算机毕设指导68 分钟前
基于微信小程序的鸟博士系统【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·tomcat·maven
C雨后彩虹15 分钟前
斗地主之顺子
java·数据结构·算法·华为·面试
CC.GG23 分钟前
【C++】AVL树
java·开发语言·c++
闲人编程24 分钟前
基础设施即代码(IaC)工具比较:Pulumi vs Terraform
java·数据库·terraform·iac·codecapsule·pulumi