Java面向对象封装和多态

头歌--Java面向对象 - 封装、继承和多态 头歌实践--Java面向对象 - 封装、继承和多态 阅读详情

封装和多态

多态概念

package com.cloud.day3;

/*

面向对象的三大特征:

   1. 封装

   2. 继承。

   3. 多态

多态:一个对象具备多种形态。(父类的引用类型变量指向了子类的对象)

或者是接口的引用类型变量指向了接口实现类的对象)

多态的前提:必须存在继承或者实现关系。

    动物  a  = new   狗();

多态要注意的细节:

   1.  多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量。

   2.  多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数。

   3.  多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数。

   4.  多态情况下,不能访问子类特有的成员。


总结:多态情况下,子父类存在同名的成员时,访问的都是父类的成员,除了在同名非静态函数时才是访问子类的。

编译看左边,运行不一定看右边。

编译看左边:java编译器在编译的时候,会检查引用类型变量所属的类是否具备指定的成员,如果不具备马上编译报错。

*/

abstract class Animal{

   String name;

   String color = "动物色";

   public Animal(String name){

      this.name = name;

   }

   public abstract void run();

   public static void eat(){

      System.out.println("动物在吃...");

   }

}

class Mouse extends Animal{

   String color = "黑色";

   public Mouse(String name) {

      super(name);

   }

   @Override

   public void run() {

      System.out.println(name+"run...");

   }

   public static void eat(){

      System.out.println("老鼠在偷吃...");

   }

   public void dig(){

      System.out.println("老鼠在打洞...");

   }

}

class Fish extends Animal{

   public Fish(String name) {

      super(name);

   }

   @Override

   public void run() {

      System.out.println(name+"摇尾巴...");

   }

}

public class Demo1 {

   public static void main(String[] args) {

      Animal a = new Mouse("小白鼠");

      a.run();

   }

}

多态场景

package com.cloud.day3;

/*

多态的应用:

  1. 多态用于形参类型的时候,可以接收更多类型的数据。

  2. 多态用于返回值类型的时候,可以返回更多类型的数据。

多态的好处:提高了代码的拓展性。

需求1:定义一个函数可以接收任意类型的图形对象,并且打印图形面积与周长。

*/

//图形类

abstract class MyShap{

   public abstract void getArea();

   public abstract void getLength();

}

class Circle extends MyShap{

   double r;

   public static final double PI = 3.14;

   public Circle(double r){

      this.r = r;

   }

   @Override

   public void getArea() {

      System.out.println("面积:"+PI*r*r);

   }

   @Override

   public void getLength() {

      System.out.println("周长:"+2*PI*r);

   }

}

public class Demo2 {

   public static void main(String[] args) {

      Circle c = new Circle(3.0);

      c.getArea();

      c.getLength();

   }

}

类型转换

package com.cloud.day4;

/*

目前多态情况下不能访问子类特有的成员。

如果需要访问子类特有的成员,那么需要进行类型强制转换.

 

基本数据类型的转换

   小数据类型-------->大的数据类型      自动类型转换

   大数据类型--------->小数据类型       强制类型转换     小数据类型  变量名 = (小数据类型)大数据类型;

 

引用数据类型的转换

   小数据类型--------->大数据类型     自动类型转换。

   大数据类型--------->小数据类型      强制类型转换

类型转换最场景的问题: java.lang.ClassCastException。强制类型转换失败。

*/

abstract class Animal{

   String name;

   public Animal(String name){

      this.name = name;

   }

   public abstract void run();

}

class Mouse extends Animal{

   public Mouse(String name) {

      super(name);

   }

   @Override

   public void run() {

      System.out.println("Mouse.run()");

   }

   public void dig(){

      System.out.println("Mouse.dig()");

   }

}

class Fish extends Animal{

   public Fish(String name) {

      super(name);

   }

   @Override

   public void run() {

      System.out.println("Fish.run()");

   }

   public void bubble(){

      System.out.println("Fish.bubble()");

   }

}

public class Demo1 {

   //定义一个方法接受任意类型对象

   public static void print(Animal a){

      if(a instanceof Mouse){

        //强制类型转换

        Mouse m = (Mouse)a;

        m.run();

      }else if(a instanceof Fish){

        Fish f = (Fish)a;

        f.bubble();

      }

   }

   public static void main(String[] args) {

      //多态

      Animal a = new Mouse("老鼠");

      print(a);

   }

}

实现关系下多态

package com.cloud.day5;

/*

多态:父类的引用类型变量指向了子类的对象或者是接口类型的引用类型变量指向了接口实现类的对象。

 

实现关系下的多态:

   接口  变量  = new  接口实现类的对象。

*/

interface Dao{

   public void add();

   public void delete();

}

class UserDao implements Dao{

   @Override

   public void add() {

      System.out.println("UserDao.add()");

   }

   @Override

   public void delete() {

      System.out.println("UserDao.delete()");

   }

}

public class Demo1 {

   public static void main(String[] args) {

      //实现关系下的多态

      Dao d = new UserDao(); //接口的引用类型变量指向了接口实现类的对象。

      d.add();

   }

}

Educoder题目:Java面向对象 - 封装、继承和多态答案解析.md Educoder题目:Java面向对象 - 封装、继承和多态答案解析 立即下载

相关推荐

Jetson AGX Orin边缘AI实战:用YOLOv8做目标检测,我的环境配置踩坑与优化记录

本文详细记录了在Jetson AGX Orin上部署YOLOv8目标检测模型的环境配置与优化过程。从JetPack版本确认、PyTorch安装陷阱到Torchvision编译技巧,再到YOLOv8部署和系统级优化,提供了完整的实战指南。特别针对边缘AI设备的特性,分享了CUDA加速、内存管理等性能调优经验,帮助开发者高效完成工业级AI应用部署。

weixin_30839881的博客 376

Java面向对象 - 封装、继承和多态的综合练习-------答案笔记

Java面向对象 - 封装、继承和多态的综合练习-------答案笔记通关任务一通关任务二通关任务三总结 通关任务一 具体实训题目和educoder地址链接: https://www.educoder.net/tasks/ebwmr7oxkhvy. 编程要求 根据提示,在右侧编辑器Begin-End处补充代码: 声明一个抽象类Pet,封装属性name和sex,声明一个带有两个参数的构造函数,声明抽象方法void talk()和void eat(); 声明一个Dog类继承自Pet,封装属性color,声明

AmbitionMM的博客 6812

【PCIe DL_Feature详解】

   Data Link Control and Management State Machine在PCIe Gen4引入了DL_Feature这个状态,该状态主要用来协商PCIe link 两端是否支持新的DL Feature,目前为止DL Feature只引入了Scaled Flow Control 来提高Gen4及以上的效率。   DL_Feature 这个状态是可选的,当 Data Link Feature Extended Capability中Data Link Feature Exchang

sinat_38294441的博客 3233

Java面向对象 - 封装、继承和多态的综合练习(答案+知识点总结)第1关:封装、继承和多态进阶(一)+ 第2关:封装、继承和多态进阶(二)

Java面向对象 - 封装、继承和多态的综合练习(答案+知识点总结)第1关:封装、继承和多态进阶(一)+ 第2关:封装、继承和多态进阶(二)

Molly 的博客 7155

ArcMap新手必看:5分钟搞定面要素的四至信息提取(附字段重命名技巧)

本文为ArcMap新手提供了快速提取面要素四至信息的详细教程,包括数据准备、坐标系选择、批量处理技巧及字段重命名优化方案。通过实战步骤和Python脚本示例,帮助用户高效完成GIS数据处理任务,特别适合行政区划数据分析和报告生成。

weixin_29266007的博客 384

Android车载多屏开发实战:从零搭建同显/异显Demo(附源码)

本文详细介绍了Android车载多屏开发的实战经验,从零搭建同显/异显Demo,涵盖多屏模拟、核心API调用、同显/异显架构实现及性能优化等关键环节。通过C++构建完整开发链路,帮助开发者快速掌握多屏同显和多屏异显技术,提升智能座舱系统的交互体验。附源码供参考。

weixin_29233857的博客 404

java面向对象(封装、继承、多态)

本文将通过一个学生管理系统从封装、继承、多态三个角度一步步讲解面向对象思想的应用。

weixin_74072917的博客 1410

深度学习分类任务中,正负样本比例失衡的5种实战解决方案(附代码)

本文深入探讨了深度学习分类任务中正负样本比例失衡的5种实战解决方案,包括智能采样技术、动态数据增强、损失函数工程、模型架构创新和训练策略优化。针对信用卡欺诈检测、医疗诊断等场景,提供了详细的代码实现和评估方法,帮助开发者有效解决样本不平衡问题,提升模型在真实场景中的表现。

h9j8k7l6m5n的博客 425

Educoder–Java面向对象(第二章)- 封装、继承和多态【笔记+参考代码】

Educoder–Java面向对象(第二章)- 封装、继承和多态【笔记+参考代码】 第一关 编程要求 根据提示,在右侧编辑器Begin-End处补充代码: 声明一个Person类,私有化属性name和age,并将字段封装起来; 在Person类中定义一个talk()方法,打印姓名和年龄信息; 在main方法中声明并实例化一Person对象p,给p中的属性赋值,调用talk()方法打印 我是...

fuhanghang的博客 4万+

Blender----利用DEM(tif)生成三维模型

利用DEM(tif)生成三维模型

LongJ_Sir的博客 5423

22、狭义相对论与曲线坐标空间相关知识解析

本文深入解析了狭义相对论与曲线坐标空间的核心概念,涵盖能量-动量张量的定义与守恒、曲线坐标系下的度量张量与基向量性质、协变与逆变张量的变换规则,并介绍了克里斯托费尔符号与协变导数的计算方法。进一步探讨了在弯曲空间中进行微积分运算的基础理论及其在广义相对论中的关键应用,如爱因斯坦场方程如何描述物质-能量对时空曲率的影响,为理解黑洞等引力现象提供了理论框架。

lambda的博客 115

java综合练习

1 package case3; import java.util.Scanner; public class Task3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String pppName = sc.next(); int pppAge = sc.nextI...

NJU phd 在读。 1914

Rancher入门到精通 - Nginx Ingress 配置指南

Rancher 是一个开源的容器管理平台,它提供了一套完整且易于使用的工具来部署、管理和扩展容器化应用。而 Nginx Ingress 则是一个常用的开源 Ingress 控制器,用于将外部请求流量导入到 Kubernetes 集群中的服务。在开始之前,请确保您已经正确安装了 Rancher 平台和 Nginx Ingress 控制器。

TechInk的博客 1311

Java面向对象 - 封装、继承和多态

简介 面向对象的三个基本特征是:封装、继承和多态。 封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类)。封装和继承的目的都是:代码重用。而多态则是为了实现另一个目的 —— 接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。 本实训主要学习面向对象三大基本特性:封装、继承和多态。 第1关:什么是封装,如何使用封装 任务描述 相关知识 什么是封装 封装的意义 编程要求 测试说明 任务描述 本关任务:构造

aiains的博客 7052

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Educoder/头歌JAVA——JAVA面向对象:封装、继承和多态

面向对象的三个基本特征是:封装、继承和多态。 封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类)。封装和继承的目的都是:代码重用。而多态则是为了实现另一个目的 —— 接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

舟舟的博客 2万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Educoder/头歌JAVA——JAVA面向对象:封装、继承和多态的综合练习

面向对象的三个基本特征: 封装,就是把客观的事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息隐藏。隐藏实现细节,使得代码模块化。 继承,可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。可以扩展已存在的代码模块。 多态,是允许你将父对象设置成为和一个或更多的它的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。父类引用指向子类对象。

舟舟的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java面向对象 - 封装、继承和多态的综合练习

第1关:通关任务一 任务描述 本关任务:按要求编写一个Java应用程序,巩固Java面向对象知识。 相关知识 为了完成本关任务,我们回顾一下前面所学知识:1.面向对象思想 ;2.封装;3.继承;4.构造函数;5.super()和this()。 面向对象思想 构造器:new就是一个构造器,作用是:①分配空间;②赋初始值(避免错误,简化输入); new Object(Parameters)构造器调用构造函数,传参为了赋初始值; 对象的基本元素是:属性和方法 类成员(属性和方法)。属性最为重要,属性的集合是一

wangyongqi的博客 1万+

JAVA头歌实训 Java面向对象 - 封装、继承和多态的综合练习

第1关:封装、继承和多态进阶(一)任务描述本关任务:按要求编写一个Java应用程序,巩固Java面向对象知识。相关知识为了完成本关任务,我们回顾一下前面所学知识:1.面向对象思想;2.封装;3.继承;4.构造函数;5.super()和this()。面向对象思想构造器:new就是一个构造器,作用是:①分配空间;②赋初始值(避免错误,简化输入);new Object(Parameters)构造器调用构造函数,传参为了赋初始值;对象的基本元素是:属性和方法 类成员(属性和方法)。

banana_778的博客 7855

头歌Java面向对象 - 封装、继承和多态的综合练习

抽象类用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化。用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现,把具体实现留给继承该类的子类。抽象类特点:含有抽象方法的类必须声明为抽象类(不管其中是否有其他方法);抽象类可以没有抽象方法,可以有普通方法;抽象类必须被继承,抽象方法必须被重写(若子类还是抽象类,不需要重写);抽象类不能被实例化(不能直接构造一个该类的对象)。抽象方法特点:

jing13_13的博客 4352

头歌Java面向对象 - 封装、继承和多态

为了完成本关任务,你需要掌握:1.什么是封装;2.封装的意义;3.实现Java封装的步骤。封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。为了完成本关任务,你需要掌握:1.继承的基本概念;2.继承的特性;3.子类对象的实例化过程。抽象类的定义规则:抽象类和抽象方法都必须用abstract关键字来修饰;抽象类不能被实例化,也就是不能用new关键字去产生对象;抽象方法只需声明,而不需实现;

qq_52833138的博客 2923

Java面向对象|封装、继承和多态

目录一.什么是面向对象二.抽象(Abstract)三.封装(Encapsulation)1.封装的步骤2.作用和意义3.方法的重载四.继承1.继承的概述2.继承的格式3.extends关键字4.implements关键字5.super 与 this 关键字5.final关键字6.重写五.多态1.多态的概述2.多态存在的三个条件3.重写、重载和多态的关系4.无法表现多态特性的三种情况5.方法绑定6.instance of和类型转换六.接口和抽象类1.abstract修饰符2.接口和抽象类的区别3.接口的特征4

Jasper的博客 1189

JAVA面向对象--封装继承和多态

不同类型的对象,相互间经常有一定数量的共同点。比如不同职业的人,他们都属于人类;不同种类的动物,他们都属于动物类;不同品牌的衣服,它们都属于服装类。将这些不同对象中的共有属性和共有方法抽取出来,就可以组成他们的父类。多态就是一个对象具有的多种状态,具体表现为父类引用指向子类实例。// 当前事物, 是一只猫c.eat();// 当前事物, 是一只动物a.eat();System.out.println("动物吃饭");@OverrideSystem.out.println("猫吃鱼");

qq_57936953的博客 1737

java面向对象--封装、继承和多态

课后习题练习 什么是封装,如何使用封装? 什么是继承,怎样使用继承? super关键字的使用 方法的重写与重载 抽象类 final关键字的理解与使用 接口 什么是多态,怎么使用多态 面向对象的三个基本特征是:封装、继承和多态。 封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类)。封装和继承的目的都是:代码重用。而多态则是为了实现另一个目的 —— 接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。 第一题: 任务描述 --

qq_45823118的博客 3652
上一篇: Servlet接口方法详解
下一篇: Servlet的实现类
午-夜
博客等级 码龄12年 95粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值