首页 > 编程语言 >Java初学者笔记-01、封装继承多态

Java初学者笔记-01、封装继承多态

时间:2025-01-17 10:54:11浏览次数:1  
标签:类型转换 01 Java 子类 多态 run Animal new

  1. 封装:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。通过封装,可以将类的信息隐藏在类内部,只暴露对外的接口(如setter和getter方法),从而提高代码的安全性和可维护性。
  2. 继承:继承是从已有的类中派生出新的类的过程。新的类(子类)能够吸收已有类(父类)的数据属性和行为,并且可以扩展新的能力。继承提高了代码的复用性和灵活性。
  3. 多态:多态是指一个方法可以有多种实现版本,即“一种定义,多种实现”。多态使得同一个接口可以在不同的对象上表现出不同的行为,从而增加了程序的灵活性和可扩展性。

多态

多态是在继承/实现情况下的一种现象。

多态的表现

表现为:对象多态和行为多态(但没有属性多态)。

//对象多态
Animal a1 = new Wolf();
Animal a2 = new Tortoise();
//行为多态
a1.run();
a2.run();

行为多态体现在编译看左边,运行看右边。编译时判断Animal中是否有run(),有就不报错。运行实际找的是子类Wolf中的run()

多态的好处

  1. 在多态形式下,对象是解耦合的,更便于扩展和维护(声明时,左父类右子对象)。
  2. 定义方法时,父类类型的形参,可以接收一切子类对象,扩展性更强、更便利。
{
    //Animal s = new Wolf();
    //只需要改右边的子类对象
    Animal s = new Tiger();
    go(s);
}

public static void go(Animal a){
    a.run();
}

上述多态代码的问题:多态下,不能调用子类独有的行为功能
怎么解决?多态下的类型转换。

多态下的类型转换

  1. 自动类型转换:父类 变量名 = new 子类();
  2. 强制类型转换:子类 变量名 = (子类)父类变量;
// 共有方法
Animal a1 = new Tiger();
a1.run();

//现在要调用Tiger的独有方法a2(),必须强制类型转换才能调用
Tiger t1 = (Tiger) a1; //范围大的赋值给范围小的要强转
t1.a2();

强转的注意事项:只要存在继承或者实现的关系,就能在编译阶段强转,编译不报错。但运行时,发现强转的类型对不上,就会报类型转换异常的错误。

People p = new Teacher();
Student s = (Student)p;

为加强正确性,应在强转前,使用instanceof关键字判断对象的真实类型。

if(p instanceof Student) {Student s = (Student)p;}

标签:类型转换,01,Java,子类,多态,run,Animal,new
From: https://www.cnblogs.com/subeipo/p/18676511/java-chu-xue-zhe-bi-ji01-feng-zhuang-ji-cheng-d

相关文章

  • JAVA基础
    java标题头生成快捷键PSVM:publicstaticvoidmain(String[]args)SOUT:System.out.print("helloword");ctrl+D;复制当前行到下一行cast表示转化alt+回车:显示错误信息ctrl+/:表示批量添加多行注释新建java程序project--src--右击--new--package--javaclass--输......
  • #java基础
    java标题头生成快捷键PSVM:publicstaticvoidmain(String[]args)SOUT:System.out.print("helloword");ctrl+D;复制当前行到下一行cast表示转化alt+回车:显示错误信息ctrl+/:表示批量添加多行注释新建java程序project--src--右击--new--package--javaclass--输......
  • 【转】[JavaScript] 数组的 filter 用法
    转自:kimi.aifilter方法用于创建一个新数组,新数组中的元素是通过测试指定条件(由提供的函数实现)的所有元素。以下是其详细用法:基本语法JavaScript复制array.filter(function(currentValue[,index[,array]]){//returntruetokeepelement,falsetoremoveelement......
  • java spring boot 实现图片压缩
    在JavaSpringBoot中实现图片压缩,通常使用一些常见的图像处理库,如ImageIO、Thumbnailator或ApacheCommonsImaging。在SpringBoot项目中,我们可以结合这些库来处理图片压缩的需求。下面我将介绍如何通过Thumbnailator来实现图片压缩,因其API简单,功能强大,适合大......
  • 【转】[JavaScript] 数组的 map 用法
    转自:kimi.aimap方法是数组的一个非常强大的方法,它用于创建一个新数组,新数组中的元素是调用一次提供的函数后的返回值。以下是其详细用法:基本语法JavaScript复制array.map(function(currentValue[,index[,array]]){//returnelementfornewarray,afterexecuting......
  • 【转】[JavaScript] 数组的 push 、shift 、splice
    push方法用于将一个或多个元素添加到数组的末尾,并返回新数组的长度。以下是其详细用法:基本语法JavaScript复制array.push(item1[,item2[,...,itemN]])array:要操作的数组。item1,item2,...,itemN:要添加到数组末尾的元素,可以是一个或多个。返回值返回新数组......
  • Origin2018软件安装详细步骤(百度网盘)
    软件简介:Origin2018是由OriginLab公司开发等我,一款功能强大的科学绘图与数据分析软件,具有丰富的绘图模板、全面的数据分析功能以及便捷的操作方式。安装环境:Win11/Win10/Win8/Win7 百度网盘链接:https://pan.baidu.com/s/1Yxu6Iuo8LoQ685QD6TKHKQ 提取码:63e3安装......
  • 【2025-01-16】帮同事买陈皮
    20:00爱是一颗星,一切迷途的船只,虽然不懂得天文,却要靠它引导。                                                 ——威廉·莎士比亚今天我让老家的高中同学给我寄了一......
  • JAVA实现五子棋小游戏(附源码)
    文章目录一、设计来源捡金币闯关小游戏讲解1.1主界面1.2黑棋胜利界面1.3白棋胜利界面二、效果和源码2.1动态效果2.2源代码源码下载更多优质源码分享作者:xcLeigh文章地址:https://blog.csdn.net/weixin_43151418/article/details/145161039JAVA实现五子棋......
  • Java生成10位随机数的方法
    在Java中生成10位随机数有多种方法,以下是一些常见的实现方式:方法一:使用Random类java复制importjava.util.Random;publicclassRandomNumberGenerator{publicstaticvoidmain(String[]args){Randomrandom=newRandom();longrandomNumber......