Java(15) 多态
一.多态
1.1 多态:一个事物的多种形态
1.2 多态的表现
行为(方法)多态:重写和重载。
引用多态(动态绑定):编译时的类型和运行时不一致的这种现象
例:父类 = 子类
Pet p = new Dog();
向上转型;父类=子类
例:Pet p = new Dog();
向下转型:子类 = (子类)父类
例: Dog d = (Dog)p;
public abstract class Pet {
private String name;
private int health=100;
private int age;
private int love=50;
public Pet(){ }
public Pet(String name,int health,int age,int love){
this.name = name;
this.health = health;
this.age = age;
this.love = love;
}
public String getName(){
return name;
}
public void setName(String name){
this.name= name;
}
public int getHealth(){
return health;
}
public void setHealth(int health){
this.health = health;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public int getLove(){
return love;
}
public void setLove(int love){
this.love = love;
}
public void ji(){
System.out.println("宠物的自白:我的名字叫:"+this.name+",年龄为:"+this.age+"和主人的亲密度为:"+this.love);
}
public abstract void eat();
}
宠物抽象类
public class Dog extends Pet{
private String strain;
public Dog(){ }
public Dog(String name,int health,int age,int love,String strain){
super(name,health,age,love);
this.strain = strain;
}
public void catchingFlyDisc(){
System.out.println("接飞盘");
int health = getHealth();
health = health-10;
setHealth(health); int love = getLove();
love = love+5;
setLove(love);
}
public void eat(){
System.out.println("狗狗吃鱼");
}
public String getStrain(){
return strain;
}
public void setStrain(String strain){
this.strain = strain;
} }
狗狗类继承宠物类
public class Penguin extends Pet {
private String sex;
public Penguin(){ }
public Penguin(String name,int health,int age,int love,String sex){
super(name,health,age,love);
this.sex = sex;
}
public void swimming(){
System.out.println("游泳");
int health = getHealth();
health = health-10;
setHealth(health); int love = getLove();
love = love+5;
setLove(love);
}
public void eat(){
System.out.println("企鹅喝水");
}
public String getSex(){
return sex;
}
public void setSex(String sex){
this.sex = sex;
} }
企鹅类继承宠物类
public class Master {
public void feed(Pet p){
p.eat();
}
public void play(Pet p){
if(p instanceof Dog ){
Dog d = (Dog) p;
d.catchingFlyDisc();
}else if(p instanceof Penguin){
Penguin pe = (Penguin) p;
pe.swimming();
}
}
}
主人类
public class TestPMPD {
public static void main(String[] args){
Master m= new Master();
//向下转型
Pet p = new Dog();
Dog d = (Dog) p;
m.feed(d);
// Pet p = new Penguin();
// m.feed(p);
}
}
测试类
运行结果为:
注意:java.lang.ClassCastException:类型转换异常
父类的运行时类型跟要转成的子类的类型不一致
注意:引用多态存在继承关系
二.instanceof
语法: 对象A instanceof 类型B
判断对象A的类型是否是类型B,是就返回true,否则返回false
例:d instanceof Dog
三.实现多态的2种形式
a.使用父类作为方法形参实现多态
public void play(Pet p){...}
b.使用父类作为方法返回值实现多态
public Pet getPet(int type){...}
Java(15) 多态的更多相关文章
- Java 中多态的实现(下)
Java 中多态的另一个语法实现是重写.重载是通过静态分派实现的,重写则是通过动态分派实现的. 在学习动态分派之前,需要对虚拟机的知识有一个初步的了解. 虚拟机运行时数据区 运行 Java 程序时,虚 ...
- 关于java中多态的理解
java三大特性:封装,继承,多态. 多态是java的非常重要的一个特性: 那么问题来了:什么是多态呢? 定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行 ...
- 深入Java核心 Java中多态的实现机制(1)
在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...
- 个人对Java中多态的一些简单理解
什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...
- Java中多态的一些简单理解
什么是多态 .面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. .多态的定义:指允许不同类的对象对同一消息做出响应.即 ...
- Java JVM 多态(动态绑定)
Java JVM 多态(动态绑定) @author ixenos 摘要:绑定.动态绑定实现多态.多态的缺陷.纯继承与扩展接口.向下转型与RTTI 绑定 将一个方法的调用和一个方法的主体关联起来,称作( ...
- Java:多态乃幸福本源
01 多态是什么 在我刻板的印象里,西游记里的那段孙悟空和二郎神的精彩对战就能很好的解释“多态”这个词:一个孙悟空,能七十二变:一个二郎神,也能七十二变:他们都可以变成不同的形态,但只需要悄悄地喊一声 ...
- 从虚拟机指令执行的角度分析JAVA中多态的实现原理
从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...
- 学习博客之Java继承多态接口
这一篇博客主要是对软工前一阶段学习的总结,主要是对Java的学习总结,包括三部分:Java的继承.多态和接口 Java的继承 继承是面向对象的三大特性之一,能够实现软件的复用. Java子类继承父类的 ...
随机推荐
- 一天一个Linux命令--nmcli
nmcli命令连接和删除SSID nmcli d wifi ...
- python3通过os模块统计指定目录下文件个数
代码: import os path = r"C:\Users\Administrator\Desktop\***" print('filenum:',len([lists for ...
- jquery html() callback
通过JQuery的.html()函数我们可以非常方便地加载一段HTML到指定的元素中,例如给<div></div>中放入一组图片.问题是JQuery的.html()函数是同步的 ...
- CentOS6.9安装WordPress搭建自己的博客网站
首先说明我用的是服务器上之前装的mysql数据库,只需要配置上就行了 准备工作 CentOS6.9 在/目录下创建一个目录src,把下载的东西都放到这个文件夹下 下载Apache Httpd,下载地址 ...
- 类Scanner
什么是Scanner类 一个可以解析基本类型和字符串的简单文本扫描器. 引用类型使用步骤 1:导包:使用import关键字导包,在类的所有代码之前导包,引入要使用的类型. java.lang包下的所有 ...
- 微信h5支付
分为 微信内H5调起支付 和 非微信浏览器H5支付. 1.H5支付(微信内) 参考链接:https://www.jianshu.com/p/6b9acdd10de6 2.JSAPI支付(非微信) 参考 ...
- nginx的概念与几种负载均衡算法
Nginx的背景 Nginx和Apache一样都是一种WEB服务器.基于REST架构风格,以URI(Uniform Resources Identifier,统一资源描述符)或URL(Uniform ...
- MyBatis 3源码解析(一)
一.SqlSessionFactory 对象初始化 //加载全局配置文件 String resource = "mybatis-config.xml"; InputStream i ...
- Java遍历List5种方法的效率对比
package com.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** ...
- Python实现FTP文件的上传和下载
# coding: utf-8 import os from ftplib import FTP def ftp_connect(host, username, password): ftp = FT ...