多态

1.多态概述

同一个对象在不同时刻表现出的不同形态

多态的前提和体现:

  • 有继承/实现关系
  • 有方法重写
  • 有父类引用指向子类对象(Animal a = new Cat();)

2.多态中的成员访问特点

  • 成员变量:编译看左边,执行看右边
  • 成员方法:编译看左边,执行也看左边

为什么成员变量和成员方法的访问不一样呢?

  • 因为成员方法有重写,而成员变量没有.

示例:

父类

package com.itheima_06;

public class Animal {
public int age = 40; public void eat(){
System.out.println("动物吃东西");
}
}

子类

package com.itheima_06;

public class Cat extends Animal {
public int age = 10;
public int weight = 15; @Override
public void eat() {
System.out.println("猫吃鱼");
} public void playGame(){
System.out.println("猫捉迷藏");
}
}

测试类

package com.itheima_06;

public class AnimalDemo {
public static void main(String[] args) {
//有父类引用指向子类对象
Animal a = new Cat(); System.out.println(a.age);
// System.out.println(a.weight); 报错 成员变量编译和运行都看左边
a.eat(); //多态中的成员方法,编译看左边,运行看右边
//a.playGame(); 报错
}
}

3.多态的好处和弊端

多态的好处:提高了程序的扩展性

集体体现:定义方法的时候,使用父类型作为参数,将来在使用时,使用具体的子类型参与操作

多态的弊端:不能使用子类的特有功能

//动物操作类
public class AnimalOperator {
/*
public void useAnimal(Cat c){
c.eat();
} public void useAnimal(Dog d){
d.eat();
} */
//传入的参数采用Animal就不用每次新建一个类就为他新定义一个方法
public void useAnimal(Animal a) {
//Animal a = new Cat();
//Animal a = new Dog();
a.eat();
}
}
//测试类
public class AnimalDemo {
public static void main(String[] args) {
//创建动物操作类的对象,调用方法
AnimalOperator animalOperator = new AnimalOperator();
Cat c = new Cat();
animalOperator.useAnimal(c); Dog d = new Dog();
animalOperator.useAnimal(d);
}
}

4.多态中的转型

  • 向上转型
  • 向下转型
public class AnimalDemo {
public static void main(String[] args) {
//向上转型
Animal a = new Cat();
a.eat();
//不能调用子类的特有方法play() //向下转型
Cat c = (Cat)a;
//可以调用子类中的特有方法play了
c.play();
}
}

Java中多态相关知识点的更多相关文章

  1. 个人对Java中多态的一些简单理解

    什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...

  2. Java中多态的一些简单理解

    什么是多态 .面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. .多态的定义:指允许不同类的对象对同一消息做出响应.即 ...

  3. 面试中关于Java中涉及到知识点(转)

    本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些, ...

  4. 关于java中多态的理解

    java三大特性:封装,继承,多态. 多态是java的非常重要的一个特性: 那么问题来了:什么是多态呢? 定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行 ...

  5. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  6. 【Socket编程】Java中网络相关API的应用

    Java中网络相关API的应用 一.InetAddress类 InetAddress类用于标识网络上的硬件资源,表示互联网协议(IP)地址. InetAddress类没有构造方法,所以不能直接new出 ...

  7. 从虚拟机指令执行的角度分析JAVA中多态的实现原理

    从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...

  8. Java 中多态的实现(下)

    Java 中多态的另一个语法实现是重写.重载是通过静态分派实现的,重写则是通过动态分派实现的. 在学习动态分派之前,需要对虚拟机的知识有一个初步的了解. 虚拟机运行时数据区 运行 Java 程序时,虚 ...

  9. Java 中多态的实现(上)

    Java 中语法上实现多态的方式分为两种:1. 重载.2. 重写,重载又称之为编译时的多态,重写则是运行时的多态. 那么底层究竟时如何实现多态的呢,通过阅读『深入理解 Java 虚拟机』这本书(后文所 ...

  10. java中的小知识点

    1.数据类型的相关知识点 1.1.java内置封装类的转换 java中内置的封装类Byte.Integer.Float.Double和Long都可以转换成double类型的数值:因为这些封装好的类中都 ...

随机推荐

  1. vs找不到msvcp120d .dll,无法继续执行代码。重新安装可能会解决此问题。

    原文链接:https://blog.csdn.net/qq_24537165/article/details/90137317 环境:win10 vs2015 c++ opencv3.4.0 截图: ...

  2. wamp+phpstrom+Xdebuge helper(google)

    一.软件安装两个软件的安装和第三个浏览器插件就不再赘述,网上有很多详细的教程,自行百度. 二.配置步骤1.wampwamp的优势在于自带xdebuge的dll文件,所以不需要在官网根据版本下载,具体位 ...

  3. select remove option safari 兼容

    select 移除某一 option 的 javascript 公司用的代码是 var ddlPrimaryResource = document.getElementById(ddlPrimaryR ...

  4. uniapp 复制 粘贴,系统剪贴板

    uniapp里不叫复制粘贴,叫系统剪贴板uni.setClipboardData({ data: this.href, success: () => { uni.hideToast(); thi ...

  5. java的Stream

    代码 List<Student> all = Student.getAll(); // 转换成数组 过滤所有的男性 Student[] students = all.stream().fi ...

  6. 查看当前执行的sql

    SELECT TOP 100 t.hostname, t.loginame, percent_complete, [session_id] , der.[request_id] , [start_ti ...

  7. 记一次对peer的理解

    今天在使用react-native开发项目的时候,想要使用async-storage. 我用的rn版本是18.2.0,不带async-storage,所以我需要自己安装下载. 于是执行命令: npm ...

  8. css盒子在不同浏览器下的差异

    标准盒子模型 盒子模型的氛围包括四个部分:margin,border,padding,content 标准盒子模型的content不包括其他内容,只有width跟height部分     conten ...

  9. HUAWEI——— 防火墙+ACL访问控制+AP上线+默认路由+NAT+DHCP(案例拓扑)

    #HUAWEI--- 防火墙+ACL访问控制+AP上线+默认路由+NAT+DHCP(案例拓扑) 网络拓扑图: 项目要求: 1.交换机SwitchA,作为有线终端的网关,同时作为DHCP server, ...

  10. mysql使用保留字导致该列查不出来(mysql版本问题)

    mysql版本是 问题: 如图这边groups是sql的保留字此时这样查询是查不出来的,并会报错语法错误.但是在5.几的mysql版本中这行sql就没有问题. 解决方法: 在groups列上加上'gr ...