IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java的三大特性之对象的多态性。 -> 正文阅读

[Java知识库]java的三大特性之对象的多态性。

? ? ? ?

? ? ? ?一:??java作为一门面对对象的语言,首先具有的便是三大特性:封装继承多态;个人认为多态之所以会放在封装、继承之后成为第三大特性,有一定的程度上是因为其部分建立在前两大特性的基础上的,继承是指某一类继承了其父类的一些属性和方法。而多态讲的是在存在父类与子类的基础上,即有继承性上的另一种性质,而封装性则在类这一定义上便有了体现,因此说多态是建立在前两个基础上的。

? ? ? ? 1.为了更好地去理解多态性,我先从多态性的一些现实意义中先去描述,再从代码中去描述。首先,多态性的现实意义可以描述为现实的一个事物中会出现多种形态,如学生,是属于人的一种,而同学张三,他既是又是学生,因此说其有着多种形态。

? ? ? ?2. 而在java中我们可以这么去理解,我们建立了一个person类person类的子类student类,当我们去new一个student对象zhangsan时,那么zhangsan既是person类的实例,也是student类的实例,因此我们在定义时便可以将张三定义为person类或者是student类。

? ? ? ?3. 用比较学术性的语言描述便是多态体现为父类引用变量可以指向子类对象(或子类的对象赋给父类)。

? ? ? ?4.多态的定义和格式:

????????????????定义格式:父类类型 变量名=new 子类类型();

? ? ? ?5.多态的其他理解:

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

? ? ? ? ? ? ? ?多态就是同一个接口,使用不同的实例而执行不同操作。

? ? ? ? 二:下面为java中多态性的代码展示。

? ? ? ? 父类Person类

package duotai;

public class Person {
	int age;
	String name;
	
	public void eat(){
		System.out.println("吃饭");
	}
	
	public void walk(){
		System.out.println("走路");
	}
}

? ? ? ? 子类Student类

package duotai;

public class Student extends Person {
	String grade;
	
	public void eat(){
		System.out.println("学生吃肉");
	}
	
	public void walk(){
		System.out.println("学生骑车");
	}
}

? ? ? ?PersonTest

package duotai;

public class PersonTest {
	public static void main(String[] args) {
		Person zhangsan=new Student();
		zhangsan.eat();
		zhangsan.walk();
	}
}

运行结果:

?从代码中可以发现,张三是Person类,但其指向一个Students类,因此我们在调用eat和walk方法时调用的是重写之后的Student中的eat和walk方法。而非person中的eat和walk方法。但是如果我们调用一个Person类中不存在的方法,但在Student类中存在的方法,会发现在运行时会报错。

上述所描述的情况其实是java中动态绑定机制下的一个结果,张三作为一个实例,在调用其方法时,首先会从其最底层的子类先去寻找相对应的方法,也便是重写的方法,如果不存在则会一层一层往上去寻找,知道找到为止,然后实现并停止查找。如果没有找到那么自然就会报错。

与方法相比较,多态性是不会对属性起作用的,即属性为父类的属性,属性的值也为父类的属性,而不会去由子类里的属性,这是一个与方法的区别,需要特别关注!!!

在多态性中存在一个对象转换的概念:即我们上面对多态定义的格式称之为隐式转换,但当我们需要将一个已经存在的对象赋值给一个新的变量时,便要使用显示转换,即在对象前加一个其是属于哪种类的对象,来告诉编译器。语法为用圆括号把目标对象的类型括起来,然后放到要转换的对象面前,例如这样子:student lisi=(student)zhangsan,(而这种student lisi=zhangsan则是错误的)。显示转换和隐式转换用在什么地方呢?当我们要把子类的实例转换为父类的变量的时,可以用隐式转换,也称之为向上转换。但把父类的实例转换为子类的变量时便要用显示转换,也为向下转换。

但有时会存在着要转换为子类的变量并不是子类的实例的情况,因此便要去判断一下是否为子类的实例来防止程序出错,因此便可以使用instanceof关键字来判断,若是则返回True,不是则返回False。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:07:59  更:2021-11-28 11:09:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:50:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码