继承 多态 向上转型 向下转型

一、什么是继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。当然,如果在父类中拥有私有属性(private修饰),则子类是不能被继承的。

1.继承的特点

  1. 只支持单继承:一个子类只允许有一个父类。
  2. 子类可以拥有父类的属性和方法:子类继承了父类,就会拥有父类中的非私有属性和方法。
  3. 子类可以拥有自己的属性和方法:子类除了继承父类的属性和方法外,还可以定义自己独有的属性和方法。
  4. 子类可以重写覆盖父类的方法:子类可以对父类中的方法进行重写覆盖,以实现自己的功能。
  5. 支持多层继承:Java支持多层继承,即一个类可以继承另一个类,而这个类又可以继承另一个类,以此类推,形成继承体系。

2.继承的使用

 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。当然,如果在父类中拥有私有属性(private修饰),则子类是不能被继承的。

2.1继承的格式

class 父类 {...
} class 子类 extends 父类 {...
}

 2.2继承的演示

//Employee.java
class Employee {//父类String name;public void work(){System.out.println("好好工作");}
}//Teacher.java
class Teacher extends Employee{public void printfName(){System.out.println("name="+this.name);}
}///Demo1.java
public class Demo1 {public static void main(String[] args) {Teacher teacher=new Teacher();teacher.name="hao";// System.out.println(teacher.name);teacher.printfName();teacher.work();//  结果   
//        name=hao
//        好好工作}
}

3 this和super的作用 

//fu.java
public class Fu {int num=5;
}//zi.java
public class Zi extends Fu {//继承父类int num=6;public void show(){System.out.println("fu num="+num);System.out.println("zi num="+num);//只能看到子类的num结果
//        fu num=6
//        zi num=6    System.out.println("zi num="+super.num);//父类的numSystem.out.println("zi num="+this.num);//子类的num结果
//        fu num=5
//        zi num=6    }
}//Demotest.java
public class Demotest {public static void main(String[] args) {Zi z=new Zi();//创建子类对象z.show();//调用子类对象的show方法,展示num}
}
4方法的重写 

  方法重写 :子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。

//Phone.java
手机基本功能
public class Phone {public void sendMessage(){System.out.println("发短信");}public void call(){System.out.println("打电话");}public void showNum(){System.out.println("来电是显示号码");}
}//newphone.javapublic class Newphone extends Phone{public void showNum(){super.showNum();//用super调用父类已经存在的方法System.out.println("显示来电头像");//在子类类方法里调用父类并且增加新功能}
}//Demo2test
public class Demo2test {public static void main(String[] args) {Newphone np=new Newphone();np.call();// 调用父类继承而来的方法np.showNum();// 调用子类重写的方法打电话来电是显示号码显示来电头像}
}

2.5 继承构造

//
public class Fu {private int n;Fu(){System.out.println("Fu构造");}
}///
public class Zi extends Fu {Zi(){super();System.out.println("zi构造");}
}public class Demo3test {public static void main(String[] args) {Zi zi=new Zi();//创建了新的子类,就会默认给子类构造(进行初始化),如果是继承了父类就会先对父类进行(构造)初始化结果Fu构造zi构造}
}

 

二、什么是多态

多态是同一个行为具有多个不同表现形式或形态的能力。

1.多态的特点

  1. 消除类型之间的耦合关系,实现低耦合
  2. 灵活性
  3. 可扩充性
  4. 可替换性

2.多态的使用

 

public abstract class Animal {// 抽象类 Animalpublic abstract void eat();// 抽象方法 eatpublic void makeSound(){System.out.println("The animal makes a sound");}
}/
public class Cat extends Animal {public void eat(){System.out.println("Cat is eating 吃鱼");}
}/
public class Dog extends Animal {//继承一个抽象类,必须要在里面重写父类的一个方法@Overridepublic void eat(){System.out.println("Dog is eating 吃肉");}
}/public class demotest {//用于演示多态public static void main(String[] args) {Cat a=new Cat();//Cat is eating 吃鱼Dog b=new Dog();//Dog is eating 吃肉showAnimalEat(a);//Cat is eating 吃鱼showAnimalEat(b);//Dog is eating 吃肉/*以上,以下两个方法, 均可以被showAnimalEat(Animal a)方法所替代而执行效果一致*/}public static void showcatEat(Cat a){a.eat();}public static void showdogEat(Dog b){b.eat();}public static void showAnimalEat(Animal a){a.eat();}public static void main1(String[] args) {Animal[] animals=new Animal[2];//创建一个animals类型的数组animals[0]=new Dog();//父类类型 变量名 = new 子类对象;animals[1]=new Cat();//向上转型,Dog对象赋值给Animal类型的变量for(Animal animal:animals){animal.eat();animal.makeSound();//Dog is eating.//The animal makes a sound//Cat is eating//The animal makes a sound}}
}

3.向上转型和向下转型使用

向上转型

 父类类型 变量名 = new 子类类型();
如:Animal a = new Cat();

 向下转型

 子类类型 变量名 = (子类类型) 父类变量名;
如:Cat c =(Cat) a;

 

public class Animal {public void makeSound(){System.out.println("the animal makes a sound");}
}///public class Dog extends Animal{@Overridepublic void makeSound(){System.out.println("the dog bark");}public void playball(){System.out.println("play ball");}
}///public class AnimalHandler {//定义AnimalHandler类,包含handleAnimals方法public void handleAnimals(Animal[] animals){//for(Animal animal: animals){//foreach循环if(animal instanceof Dog){ // 检查是否是Dog对象Dog dog=(Dog)animal;// 向下转型为Dog对象dog.playball();// 调用Dog类特有的方法}else{animal.makeSound(); // 对于其他Animal对象,调用通用方法}}}
}///public class test {public static void main(String[] args) {Animal[] animals=new Animal[2];animals[0]=new Dog();//向上转型animals[1]=new Animal(); 直接赋值Animal类型的对象for(Animal a:animals){a.makeSound();
// 调用makeSound方法,如果是Dog对象,则执行Dog类的makeSound实现
//如果是父类animal就执行父类的makeSound方法结果
// the dog bark
// the animal makes a sound}}}public class test1 {public static void main(String[] args) {// 创建Animal数组,包含Dog和其他Animal对象Animal [] animals={new Dog(),new Animal(),new Dog()};// 创建AnimalHandler对象AnimalHandler animalHandler=new AnimalHandler();// 调用handleAnimals方法,将数组名传进去animalHandler.handleAnimals(animals);结果//play ball//the animal makes a sound//play ball}
}

以上就是小编总结的知识点啦,如果对你有帮助请三连奥

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/796174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL基础】MySQL基本操作详解

系列文章目录 第1篇:【MySQL基础】MySQL介绍及安装 第2篇:【MySQL基础】MySQL基本操作详解 文章目录 ✍1,数据库操作     🔍1.1,查看数据库     🔍1.2,创建数据库     🔍1.3,选择数据库    …

腾讯云添加域名后不生效

问题原因 添加域名后不生效可能是因为没有加CDN域名解析 解决步骤

算法| ss 滑动窗口

3.无重复字符的最长子串209.长度最小的子数组1052.爱生气的书店老板 水果成篮 删除子数组的最大得分 3.无重复字符的最长子串 /*** param {string} s* return {number}*/ // 思路 // 滑窗三问三答 // 右指针是谁 // 左指针什么时候移动 偏爱while循环 // 结果更新 var leng…

MacOS Docker 可视化面板 Portainer

一、简介 Portainer 是一个可视化的容器镜像图形管理工具,使用 Portainer 可以轻松构建、管理和维护Docker 环境。 而且完全免费(portainer-ce 是免费的,portainer-ee 是需要授权的,今天安装的是 portainer-ce 版本)&…

leetcode599-Minimum Index Sum of Two Lists

题目 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假…

Java多态练习2

设计金融产品类Financial,属性包括产品名称、产品介绍、起投金额、产品期限(int)、年化收益(百分数);方法包括发布、截止、投资。 设计金融产品类子类: 基金产品Fund,继承金融产品类…

Jenkins (三) - 拉取编译

Jenkins (三) - 拉取编译 通过Jenkins平台 git 拉取github上项目,通过maven编译并打包。 Jenkins 安装 git 插件 Manager Jenkins -> Plugins -> Available plugins -> Git 打包编译检验 FressStyle 风格编译 New Item输入 item name Spring-Cloud-1…

LeetCode---127双周赛

题目列表 3095. 或值至少 K 的最短子数组 I 3096. 得到更多分数的最少关卡数目 3097. 或值至少为 K 的最短子数组 II 3098. 求出所有子序列的能量和 一、或值至少k的最短子数组I&II 暴力的做法大家都会,这里就不说了,下面我们来看看如何进行优化…

JDK1.8 有哪些新特性

JDK 1.8引入了多个新特性,显著改善了Java语言的函数式编程能力、集合操作和日期时间处理。以下是一些主要的新特性: Lambda表达式: Lambda表达式提供了一种清晰简洁的方式来表示一段可执行的代码,允许将函数作为参数传递给方法。 // 之前的…

1、快速上手Docker:入门指南

文章目录 Linux中安装docker防火墙端口配置web项目需要的环境安装yarn安装nodejs安装脚手架并准备项目 构建镜像启动镜像查看日志管理镜像推送镜像 发布项目准备服务器环境部署项目: PS:扩展一点小知识 这篇文章只是docker入门的第一个Docker项目&#x…

STM32使用HAL库获取GPS模块HT1818Z3G5L信息(方法1)

1、写在最前 先了解一下GPRMC的格式 格 式: GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,A*50 说 明: 字段 0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data&…

数据结构|排序总结(1)|直接插入排序

排序分类 插入排序:直接插入排序,希尔排序 选择排序:选择排序,堆排序 交换排序:冒泡排序,快速排序 归并排序 插入排序 直接插入排序 相当于摸牌,例如我们现在手上有{2,4&#xff0…

AcWing 2099. 找到和最大的长度为 K 的子序列

解题思路 用数组来保存数字的出现次数。hash和set不能保存相同的键值&#xff0c;这种情况下只能用数组。 相关代码 class Solution {public int[] maxSubsequence(int[] nums, int k) {int a[] new int[nums.length];for(int i0;i<nums.length;i) a[i] nums[i];Arrays…

C/C++ 查泄漏得一些方法

在 C/C 之中内存泄漏一直是个老大难问题&#xff0c;但索性用于辅助定位查找得解决方案也不少&#xff0c;虽然没那么详细&#xff0c;但总比没有要好的多。 有一些是用三方工具来查得&#xff0c;但这个需要编译debug&#xff0c;带上符号信息得版本才可以&#xff0c;就很麻烦…

volatile 能一个非原子操作变成原子操作吗

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:volatile 能一个非原子操作变成原子操作吗 volatile 关键字在 Java 中主要用于确保多线程环境下的可见性和禁止指令重排序,但它并不能使一个非原…

碘浊度法与红外相机联用测定食品中维生素C

&#x1f31e;欢迎来到看论文的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年4月6日&…

从新手到专家:精通MacOS上的Homebrew安装

I. 前言 在介绍如何精通MacOS上的Homebrew安装之前&#xff0c;首先需要了解什么是Homebrew以及为什么要使用它。 1. Homebrew是什么&#xff1f; Homebrew是一款开源的软件包管理工具&#xff0c;可以让用户轻松地安装、升级和卸载各种软件包。与其他的软件包管理器相比&am…

PostCss:详尽指南之安装和使用

引言 在现代前端开发中&#xff0c;CSS预处理器如Sass、Less等已经成为提升开发效率、增强代码可维护性的重要工具。然而&#xff0c;随着Web技术的发展&#xff0c;CSS的功能也在不断扩展&#xff0c;一些新的CSS语法&#xff08;如变量、自定义属性、CSS Grid等&#xff09;以…

5.112 BCC工具之ext4slower.py解读

一,工具简介 ext4slower可以显示慢于阈值的ext4读取、写入、打开和fsync操作。 该工具追踪常见的ext4文件操作:读取、写入、打开和同步。它统计在这些操作中花费的时间,并打印超过阈值的每个操作的详细信息。 默认情况下,使用的最小毫秒阈值为10。 二,代码示例 #!/us…

霍兰德职业兴趣测试:发掘你的工作激情与天赋(包含开源免费的API接口)

霍兰德倾向测验的原理 霍兰德职业倾向测验&#xff0c;它是美国著名职业指导专家J&#xff0e;霍兰德&#xff08;HOLLAND&#xff09;编制的&#xff0c;他的职业选择理论把职业分为六种不同类型&#xff0c;即现实型、研究型、艺术型、社会型、企业型、常规型。霍兰德认为&a…