多态

概念: 父类的引用指向子类的实例对象
必须在继承关系的状态下产生了多态的概念

public class Person{}
public class Teacher extends Person{}
public clsss Student extends Person{}public class Test{public static void main(String[] args){Teacher t = new Teacher();   Teacher t;  // 声明一个对象类型(声明了一个引用变量)t = new Teacher();   // 对指定的对象进行实例化int n;n = 1000;//  父类的引用 指向 子类的实例对象Person p = new Teacher();    // 多态// 声明的数据类型必须为父类类型, 而实例化的数据类型必须为子类类型Person p2 = new Student();Student s = new Student();Person p = new Person();}
}

注意: 子类绝对不能指向父类的实例对象

向上转型 : 由本态转换为多态(父类的引用指向子类的实例对象)
向下转型: 由多态转换为本态(子类的引用指向子类实例本身),将父类类型强制转换为子类类型


instanceof

判断instanceof关键字前后的类型是否为同一种数据类型 - - - > 关键字前的数据类型是否与关键字后的实际对象数据类型一致

最终作用: 能够调用子类中独有成员方法(父类中不存在)
- - 注意: 必须向下转型

// 由于引用变量的数据类型是Person类型,
// 所以不能将父类的类型赋给子类的类型
Person p = new Teacher();
if(p instanceof Teacher){// 向下强制转换Teacher t = (Teacher)p;
}

抽象类: abstract

类: 将现实世界中某一种具体事物进行抽象描述(特征与行为)

抽象类: 将现实世界中具有相同类型的多种事物进行抽象描述

关键字: abstract 声明当前类为一个抽象类

abstract class Animal{private String name;private double weigth;public Animal(){}public Animal(String name, double weigth){this.name = name;this.weigth = weigth;}public String getName(){ return this.name; }public void setName(String name){ this.name = name; }public double getWeigth(){ return this.weigth; }public double setWeigth(double weigth){ return this.weigth = weigth; }/*public void eat(){System.out.println("???");}public void sleep(){System.out.println("???");}*/public abstract void eat();public abstract void sleep();
}class Dog extends Animal{public void eat(){System.out.println("够吃骨头");}public void sleep(){System.out.println("狗睡狗窝");}public void dogMethod(){System.out.println("Dog类中独有的dogMethod方法");}}class Cat extends Animal{public void eat(){System.out.println("猫吃鱼");}public void sleep(){System.out.println("猫睡猫窝");}public void catMethod(){System.out.println("Cat类中独有的catMethod方法");}}

可以修饰:

  1. 修饰类: 被abstract修饰的类称之为抽象类

    1. 抽象类不能被实例化
      – 为什么不能被实例化?

    2. 抽象类中可以包含抽象方法

  2. 修饰方法: 被abstract修饰的方法称之为抽象方法

    抽象方法只有方法声明, 而没有方法体

    语法: 访问控制修饰符 abstract 返回类型 方法名称(参数列表);

     public abstract void eat();
    

    抽象方法为什么没有方法体?
    因为它的具体实现功能在抽象类中不明确

     **注意**: 如果一个子类继承了抽象父类, 那么该子类必须重写抽象父类中的所有的抽象方法   如果一个子类继承了抽象父类,但没有重写抽象父类中所有的抽象方法, 那么该子类必须声明成为抽象类
    

抽象类: 1. 不能被实例话 2. 抽象类适用于多态

static

static: 静态的
可以修饰:

  1. 成员属性
    被static 修饰的成员属性称之为静态变量/类属性
    – 被所有对象共享使用

  2. 成员方法
    被static修饰的成员方法称之为静态方法/类方法
    被static修饰的成员的调用方式:
    类名.成员名称
    对象名.成员名称

注意: 抽象方法不能被static修饰

静态代码块:
被static修饰的代码块称之为静态代码块

static{

}

  1. 静态代码块在类加载时被执行
    – 如果有多个静态代码块, 那么按照书写顺序执行
  2. 只会被执行一次

动态代码块:

不使用static修饰的代码块

{
// code…
}

执行时机:
在实例化对象之前被执行
– 在调用构造器之前被执行.
在每次创建对象之前都会被执行

作用: 在实例化对象之前做一些初始化工作

应用程序执行:

 源码进行编译成为字节码将字节码加载到内存中(类加载)到main方法,按顺序执行

java面向对象之多态相关推荐

  1. 12 Java面向对象之多态

    JavaSE 基础之十二 12 Java面向对象之多态 ① 多态的概念及分类 多态的概念:对象的多种表现形式和能力 多态的分类 1. 静态多态:在编译期间,程序就能决定调用哪个方法.方法的重载就表现出 ...

  2. Java 面向对象:多态的理解

    Java 面向对象:多态的理解 一.多态的定义 一个对象的实际类型是确定的,但可以指向引用对象的类型可以有很多(父类,有关系的类) 操作符的多态 +可以作为算数运算,也可以作为字符串连接 类的多态 父 ...

  3. Java面向对象之多态(来源于身边的案例)

    2019年1月3日 星期四 Java面向对象之多态(来源于身边的案例) 1. 为什么要用多态? 1.1 多态是面向对象的三大特性之一 1.2 多态是基于接口设计的模型 1.3 多态具有横向扩展特性 1 ...

  4. Java面向对象:多态——基于继承的向上转型、方法重写、动态绑定

    Java面向对象:多态 1.多态的概念 2.向上转型和向下转型 (1)向上转型 (2)向下转型 3.方法重写 4.动态绑定与静态绑定 5.多态的优缺点 ======================== ...

  5. 面向小姐姐的编程——JAVA面向对象之多态

    多态概述 什么是多态? 多种状态,同一对象在不同情况下表现出不同的状态或行为 比如你女朋友,会有多种表情,多种姿态,多种情绪,这都是多态. Java中实现多态的步骤 要有继承(或实现)关系 要有方法重 ...

  6. java面向对象的多态_java面向对象(五)之多态

    多态 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. ...

  7. 新手小白学JAVA 面向对象之多态

    多态 1. 概念 多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态. 可以把不同的子类对象都当作父类来看, ...

  8. day11 Java 面向对象 final 多态

    文章目录 一.final 关键字 二.多态 (polymorphic) 1.基本 2.多态访问成员特点 3.向上转型和向下转型 3.instanceof 关键字 4.多态访问成员特点 五.练习 总结 ...

  9. Java面向对象之多态解析、final关键字

    一.多态 1.简单说明 (1)同一个对象拥有多个状态,可以把不同的类型进行统一,让程序具有超强的可扩展性,简化了调用时的操作. (2)"父类=子类"向上赋值:因为子类可以当做父类看 ...

  10. Java面向对象设计多态特征理解

    a.多态:具有表现多种形态的能力的特征,具有多种实现方式 b.多态的要求: 1.必须有继承 2.要有方法重写 3.父类引用指向子类对象 c.多态的优点:简化代码,去掉繁琐 d.演示代码: packag ...

最新文章

  1. 如何优雅的使用Mock Server
  2. 元组tuple类型内置方法
  3. 道旅:使用ARMS做业务监控数据清洗
  4. SS CMS 全新跨平台 V7.0 版本正式发布
  5. qr分解求线性方程组_梯度下降求解线性方程组算例设计
  6. 图灵奖大佬 Lecun 发表对比学习新作,比 SimCLR 更好用!
  7. CAN总线技术 | 物理层01 - CAN信号电平
  8. 装箱问题(信息学奥赛一本通-T1295)
  9. python绘制等距曲线_python应用之猪肉价格曲线的绘制
  10. 嵌入式USB转RS232九针串口线驱动,及串口软件secureCRT的使用
  11. 使用iperf测试网速
  12. 联想android刷机教程,超详细的联想刷机教程~带你嘻刷刷
  13. js一键复制并调起微信客户端
  14. 表单下的botton如何禁止提交
  15. android加速度传感器 源码,Android项目源码利用加速度传感器实现计步
  16. java imgui,发布使用 IMGui 基于 msys2 平台编写的软件
  17. Kaldi WFST最小化算法
  18. 2020软件开发趋势预测(学习总结)
  19. 计算机结构体系:循环展开题型 (非凭感觉的方法详解)
  20. 10. JS编程之求数组元素的二次方

热门文章

  1. wps页眉显示一级标题_WPS的word页眉内添加的文字怎么和1挨着
  2. VS2010/MFC flexcell使用
  3. Download interrupted: Read timed out问题解决方案集
  4. 成为工程师,而不是码农(需求分析)
  5. Spring源码分析系列-循环依赖和三级缓存
  6. vnpy本地数据导入
  7. 深入理解JVM之虚拟机类加载机制
  8. 模仿苹果?小米线下软肋永不会补全
  9. 八一学院计算机应用基础怎么考,国家开放大学学习指南形考作业参考答案
  10. Zookeeper-四字命令