Java基础知识总结继承与多态详解

article/2025/7/24 7:25:04

1. 引言

  • 面向对象编程的核心概念
    面向对象编程是模拟人的思维方式来组织代码,便于处理复杂的业务。

面向对象四大核心特征:
封装:将数据和操作数据的方法组合在一起,隐藏内部实现的具体细节,只需要暴露必要的接口。

继承:
一个类获得另一个类的属性和方法,实现代码的复用和拓展,子类继承父类。

多态:
一个接口可以有多种不同的实现方式,运行时候根据具体对象决定调用哪个方法。比如“动物叫这个行为”,可以实现狗汪汪叫,猫喵喵叫,实现方式不同,但是都属于这个行为

抽象:
提取食物的共同特征,忽略实现的具体细节,只关注本质属性。比如定义“车”,特征是轮子,可以行驶等特征,而不是关注具体品牌型号。

2. 继承(Inheritance)基础

2.1 什么是继承

  • 继承的定义和概念
    允许一个类(子类)获得另一个类(父类)的属性和方法。子类可以重用父类的代码,添加自己特有的功能或者修改从父类继承来的行为。

提现的是“is a ”的关系,比如Cat is anlimal子类是父类的一种特殊类型。

  • Java中继承的语法结构
  • class 子类名 extends 父类名 { // 子类的额外属性 // 子类的额外方法 // 重写父类的方法 }

2.2 继承的基本语法

  • extends 关键字的使用
//父类定义
class Animal{protected String name;protected int age;public void eat(){System.out.println(this.name+"正在吃饭");}public void sleep(){System.out.println(this.name+"正在睡觉");}
}
//子类继承父类
class Cat extends Animal{private String breed;//子类特有的属性//子类特有的方法public void bark(){System.out.println(this.name+"正在狂叫");}
} 

特点:

  • 子类不能继承父类的private(属性和方法)
  • 子类可以添加自己特有的成员
  • 子类可以重写父类的方法来改变其行为
  • 一个父类可以有多个子类
  • 一个子类只能有一个直接父类(单继承)

2.3 继承的特性

  • 单继承特性(Java不支持多重继承)
  • 传递性(A继承B,B继承C,则A也继承C的特性)
  • 子类可以扩展父类功能
class Animal{protected String name;protected int age;//构造方法public Animal(String name,int age){this.name = name;this.age = age;}public void eat(){System.out.println(this.name+"正在吃饭");}public void sleep(){System.out.println(this.name+"正在睡觉");}public void showInfo(){System.out.println("名字:"+name+",年龄"+age);}//狗继承动物类class Dog extends Animal{private String berrd;public Dog(String name, int age){super(name,age);//调用父类构造方法this.breed = breed ;}//狗独有的行为public void bark(){System.out.println(this.name+"狗在叫");	}//重写父类方法@Overridepublic void showInfo(){super.showInfo();//调用父类构造方法System.out.println("Breed: " + breed);} }//使用示例public class Test{public static void main(String[] args){Dog dog = new Dog("小黑",2,"Black");//调用继承方法dog.eat();dog.sleep();//调用子类方法dog.bakr();dog.sleep();//调用重写的方法dog.showInfo();}}
}

2.4 方法重写(Override)

  • @Override注解的作用
    编译时检查、提高代码可读性、防止错误(方法签名不匹配的时候,编译器会报错)

  • 重写的规则和限制
    方法名、参数列表必须完全相同
    返回类型可以是父类返回类型的子类
    访问修饰符可以相同或者不同
    static、final、private不能重写
    访问权限不能更严格

// 父类
protected void method() { }// 子类 - 正确
public void method() { }     // 更宽松
protected void method() { }  //  相同// 子类 - 错误
private void method() { }    //  更严格
  • 重写与重载的区别
    在这里插入图片描述
//重写
class Animal{public void run(){}
}
class Dog extends Animal{@Overridepublic void run(){}
}
//重载
class Example{public void run(){};public void run(int x){};//参数类型不同
}

2.5 super关键字

  • super的作用和使用场景
  • 调用父类构造方法
  • 调用父类的方法和属性
  • 代码示例演示

2.6 构造方法与继承

  • 子类构造方法的执行顺序
  • 显式调用父类构造方法
  • 默认构造方法的继承规则

3. 多态(Polymorphism)详解

3.1 多态的概念

  • 多态的定义
    同一个接口可以有多种不同的实现方式

  • "一个接口,多种实现"的理解

// 统一的接口
Shape shape;// 多种不同的实现
shape = new Circle();      // 圆形的实现
shape = new Rectangle();   // 矩形的实现  
shape = new Triangle();    // 三角形的实现// 同一个方法调用,不同的执行结果
shape.draw();  // 运行时决定具体绘制什么图形

3.2 多态的实现方式

//方式1:

  • 继承 + 方法重写
abstract class Animal{public abstract void bark();
}
class Dog extends Animal {@Overridepublic void bark(){System.out.println("旺旺");}
}
class Cat extends Animal{@Overridepublic void bark(){Systen.out.println("喵喵");}
}
//方式2:
接口实现```java
interface Drawshape{void draw();
}
class Circle implements Drawshape{public void draw(){System.out.println("画圆"); }
}
class Rect implements Drawshape{public void draw(){System.out.println("画方"); }
}
//方式3:
抽象类实现```java
abstract class Vehicle {public abstract void start();public void stop() { System.out.println("停止"); }  // 具体方法
}class Car extends Vehicle {public void start() { System.out.println("汽车启动"); }
}

3.3 多态的语法表现

  • 父类引用指向子类对象
// 语法形式:父类型 引用名 = new 子类型();
Animal animal = new Dog();        // 向上转型
Shape shape = new Circle();       //  向上转型
Drawable drawable = new Square(); //  接口引用指向实现类
  • 动态绑定(晚期绑定)
Animal animal = new Dog();
animal.makeSound();  // 编译时:不知道具体调用哪个方法// 运行时:动态决定调用Dog的makeSound()
  • 方法调用的运行时决定
public void testPolymorphism(Animal animal) {animal.makeSound();  // 运行时根据实际对象类型决定调用
}testPolymorphism(new Dog());  // 输出:汪汪
testPolymorphism(new Cat());  // 输出:喵喵

3.4 多态的优势

//一个方法可以处理多种类型
public void drawShape(Shape shape){shape.draw();shape.calculateArea();
}
//可以处理所有shape的子类
processShape(new Circle());
processShape(new Rectangle());
processShape(new Triangle());

3.5 向上转型与向下转型

  • 向上转型(自动类型转换)
// 语法:父类型 引用 = 子类对象;
Animal animal = new Dog("旺财", 2);  // 自动向上转型
  • 向下转型(强制类型转换)
Animal animal = new Dog("旺财", 3, "金毛");
Dog dog = (Dog) animal;  // 强制向下转型
  • instanceof关键字的使用
Animal animal = new Dog("旺财", 3, "金毛");if (animal instanceof Dog) {Dog dog = (Dog) animal;  // 安全的向下转型dog.bark();              // 调用Dog特有方法
}

4.1 抽象类与继承

  • 抽象类的定义和使用
abstract class Vehicle {protected String brand;  // 具体属性public Vehicle(String brand) {  // 构造方法this.brand = brand;}// 抽象方法 - 子类必须实现public abstract void start();public abstract void stop();// 具体方法 - 子类可直接使用public void displayInfo() {System.out.println("品牌: " + brand);}
}
  • 抽象方法的继承要求
    规则:
    必须实现:子类必须实现所有抽象方法
    可以重写:子类可以重写具体方法
    继承属性:子类继承父类的属性和具体方法
class Car extends Vehicle {public Car(String brand) {super(brand);}@Overridepublic void start() {  // 必须实现System.out.println(brand + "汽车启动");}@Overridepublic void stop() {   // 必须实现System.out.println(brand + "汽车停止");}
}

4.2 接口与多态

  • 接口的多实现特性
// 接口定义
interface Flyable {void fly();
}interface Swimmable {void swim();
}// 类可以实现多个接口
class Duck implements Flyable, Swimmable {@Overridepublic void fly() { System.out.println("鸭子飞行"); }@Overridepublic void swim() { System.out.println("鸭子游泳"); }
}

4.3 final关键字的影响

  • final类不能被继承
  • final方法不能被重写
  • final变量的继承特性

抽象类与接口使用指南

抽象类:当需要提供部分共同实现时
接口:当需要定义行为契约或支持多重继承时

final关键字使用场景

final类:工具类、不可变类(如String)
final方法:模板方法模式中的关键步骤
final变量:常量定义、不可变对象


http://www.hkcw.cn/article/XZYLeOKHtE.shtml

相关文章

Lyra学习笔记2 GFA_AddComponents与ULyraPlayerSpawningManagerComponent

目录 前言GameFeatureAction_AddComponentsULyraPlayerSpawningManagerComponent缓存所有PlayerStart位置选择位置 前言 1.以control模式为例 2.比较散,想单独拿出一篇梳理下Experience的流程 GameFeatureAction_AddComponents 这部分建议看 《InsideUE5》GameFeatu…

EDW2025|数据治理的神话破除——从误区到现实

在当今数据驱动的世界中,数据治理已成为企业成功的关键因素。然而,许多组织在实施数据治理时,常常被一些常见的误区所困扰。本文将逐一破除这些误区,揭示数据治理的真实面貌。 误区一:你需要一个大的预算!…

(24)多租户 SaaS 平台设计

文章目录 2️⃣4️⃣ 多租户 SaaS 平台设计 🏢🔐🚀 多租户SaaS平台:打造云端共享公寓的隔离术!🏗️ 多租户架构模型:三种共存方式1️⃣ 独立数据库模式2️⃣ 共享数据库,独立Schema模…

理想树图书:以科技赋能教育,开启AI时代自主学习新范式

深耕教育沃土 构建全场景教辅产品矩阵 自2013年创立以来,理想树始终以教育匠心回应时代命题。在教辅行业这片竞争激烈的领域,由专业教育工作者组成的理想树图书始终秉持“知识互映”理念,经过十余年的精耕细作,精心打造了小学同步…

26 C 语言函数深度解析:定义与调用、返回值要点、参数机制(值传递)、原型声明、文档注释

1 函数基础概念 1.1 引入函数的必要性 在《街霸》这类游戏中,实现出拳、出脚、跳跃等动作,每项通常需编写 50 - 80 行代码。若每次调用都重复编写这些代码,程序会变得臃肿不堪,代码可读性与维护性也会大打折扣。 为解决这一问题&…

网易 - 灵犀办公文档

一. 企业介绍 网易是中国领先的互联网技术公司,为用户提供免费邮箱、游戏、搜索引擎服务,通过开设新闻、娱乐、体育等30多个内容频道,以及博客、视频、论坛等互动交流,网聚人的力量。 为了给中小企业和个人打造一款综合性办公产…

2025年素养大赛编程赛项练习题

我用K克网盘分享了「最新素养大赛.zip」,点击链接即可保存。打开「K克App」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。 链接:https://pan.quark.cn/s/c2f85a297992 提取码:d4Uq

CSS3前端入门(第三天)2D转换 transform

转换(transform)是CSS3中具有颠覆性的特征之一,可以根据实现元素的位移、旋转、缩放等效果 移动:translate旋转:rorate缩放:scale 2D转换之移动translate 2D移动是2D转换里面的一种功能,可以…

深兰科技董事长陈海波受邀出席2025苏商高质量发展(常州)峰会,共话AI驱动产业升级

5月29日,2025苏商高质量发展峰会在常州隆重开幕。本次峰会聚焦新质生产力培育与产业创新转型,汇聚了众多江苏省内知名企业家、专家学者及政府代表。深兰科技创始人、董事长陈海波作为人工智能领域的领军企业代表,受邀出席盛会并参与重要活动环…

【软件】navicat 官方免费版

Navicat Premium Lite https://www.navicat.com.cn/download/navicat-premium-lite

AIGC与影视制作:技术革命、产业重构与未来图景

文章目录 一、AIGC技术全景:从算法突破到产业赋能1. **技术底座:多模态大模型的进化路径**2. **核心算法:从生成对抗网络到扩散模型的迭代** 二、AIGC在影视制作全流程中的深度应用1. **剧本创作:从“灵感枯竭”到“创意井喷”**2…

消防体能考核器材的智能化发展

消防员体能考核器材的智能化发展,在实际应用中带来了诸多益处。 一、精准计时与动作评判 高精度计时 :如400米障碍智能考官,依托高精度传感器和先进算法,能够精确到毫秒记录跑步用时,改变了传统人工计时易出现误差的…

大厂前端研发岗位设计的30道Webpack面试题及解析

文章目录 一、基础核心二、配置进阶三、性能优化四、Loader原理五、Plugin机制六、高级应用七、工程化实战八、原理深挖九、异常处理十、综合场景一、基础核心 Webpack的核心概念是什么? 解析:入口(entry)、输出(output)、加载器(loader)、插件(plugins)、模式(mode)。Loader…

展会聚焦丨漫途科技亮相2025西北水务博览会!

2025第三届西北水务数字化发展论坛暨供排水节水灌溉新技术设备博览会在兰州甘肃国际会展中心圆满落幕。本届展会以“科技赋能水资源,数智引领新动能”为主题,活动汇集水务集团、科研院所、技术供应商等全产业链参与者,旨在通过前沿技术展示与…

二、OpenCV图像处理-图像处理

目录 1、连通性 2、形态学操作 2.1腐蚀和膨胀 2.2开闭运算 2.3礼帽和黑帽 2.4总结 3、图像平滑 3.1图像噪声 3.2均值滤波 3.3高斯滤波 3.4中值滤波 3.5总结 4、直方图 4.1直方图的原理与显示 4.2掩膜的应用 4.3直方图均衡化 4.4自适应均衡化 4.5总结 5、边缘…

代码随想录算法训练营 Day60 图论Ⅹ Bellmen_ford 系列算法

图论 题目 94. 城市间货物运输 I Bellmen_ford 队列优化算法 SPFA 大家可以发现 Bellman_ford 算法每次松弛 都是对所有边进行松弛。 但真正有效的松弛,是基于已经计算过的节点在做的松弛。 本图中,对所有边进行松弛,真正有效的松弛&#…

CppCon 2014 学习:Making C++ Code Beautiful

你说的完全正确,也很好地总结了 C 这门语言在社区中的两种典型看法: C 的优点(Praise) 优点含义Powerful允许底层控制、系统编程、高性能计算、模板元编程、并发等多种用途Fast无运行时开销,接近汇编级别性能&#x…

手机照片太多了存哪里?

手机相册里塞满了旅行照片、生活碎片,每次清理都舍不得删?NAS——一款超实用的存储方案,让你的回忆安全又有序~ 1️⃣自动备份解放双手 手机 / 电脑 / 相机照片全自动同步到 NAS,再也不用手动传文件 2️⃣远程访问像…

Java String的使用续 -- StringBuilder类和StringBuffer

文章目录 字符串的不可变性StringBuilder和StringBuffer函数使用 字符串的不可变性 字符串不可变是因为有private修饰,只能在类的内部使用不可以在类外使用,因此使用时是不可以修改字符串的 public class test {public static void main(String[] args…

关于xilinx pcie ip core管脚分配出现布局布线报错问题说明

一、问题说明 xilinx的pcie几个ip core选择的物理位置是固定的,那么相当于管脚就被指定了,但是这个可能和原理图的真实情况对不上 二、xilinx官方推荐 xilinx对pcie放置的位置是有推荐的,如果没有按照推荐的,是否有问题呢&#x…