首页 > 编程语言 >java多态

java多态

时间:2022-11-01 13:11:06浏览次数:45  
标签:java 对象 子类 多态 引用 父类 方法

测试一:成员变量:编译时期向左看,运行时也向左看

测试二:成员方法:编译时期向左看,运行时期向右看

什么是多态呢?

多态可以理解为是同一个方法由于发送对象的不同而执行不同的行为方式。

一个对象的实际类型是确定的,但是引用类型是不确定的。

举个例子:

new Student();//这个对象的实际类型就是学生类
Student s1 = new Student();//学生类型的引用指向了这个学生对象
Person s2 = new Studnet();//人类型的引用指向了,这个学生对象
这也就是我们常说的父类的引用指向了子类的对象(注意:这里一定得是父类的引用才能指向子类的对象,不存在继承关系的类,是不能实现多态的)
多态是方法的多态,不是属性的多态
多态是同一个方法由于发送对象的不同,而执行的行为不同,这就是多态。

多态存在的条件:
从上面的叙述我们不难看出,多态的条件有哪些:

有继承关系
子类重写了父类的引用
分类的应用指向了子类对象
不同的引用实现的,指向的对象是不同的
new Student();//这个对象的实际类型就是学生类
Student s1 = new Student();//学生类型的引用指向了这个学生对象
Person s2 = new Studnet();//人类型的引用指向了,这个学生对象
/*
s1 可以调用person类中的方法(由于s1继承的person类),也可以调用自身的方法,如果s1中重写了person类中的方法,那么执行的时候,s1执行,重写方法的行为。
s2 可以调用peroson类中的方法,但是不能调用student类中的方法。(也就是我们常说的父类不能调用,子类中特有的方法)。如果,子类重写了父类的方法,在执行的时候,会执行重写方法的行为。

可以简单的总结为:编译看左边,运行看右边。

什么样的方法不能被重写:
static修饰的方法(static修饰的方法是静态方法,属于类,不属于实例)
final修饰的方法
private修饰的方法
多态引用在什么地方呢?
1.多态数组的使用,数组定义为父类型,但是,实际为子类型
2.方法定义的形参为父类型,但是实际参数,可以是子类型
多态的好处:
提高了代码的维护性(继承)
提高了代码的拓展性(多态)
提高了代码的安全性(将对象进行了隐藏,不对外暴露)

class Animal{
    // 如果父类中没有call方法,那么子类中也不能调用该方法,编译时会出错
    public void call(){
        System.out.println("动物再叫。。。。。。。。");
    }
    
}
class Dog extends Animal{
    public void call() {
        System.out.println("狗在叫。。。。。。。");
    }
}

/**
 * 要实现多态,需要满足以下条件
 * 1.要有继承关系
 * 2.方法的重写
 * 3.要有父类的引用指向子类对象
 */
public class Study_DuoTai {
    public static void main(String[] args) {
        // 父类引用指向子类对象
        Animal a1 = new Dog();
        a1.call();
    }
}

标签:java,对象,子类,多态,引用,父类,方法
From: https://www.cnblogs.com/ch2020/p/16847329.html

相关文章

  • 读书笔记——Java的特性
    目录简单性面对对象分布式健壮性安全性可移植性——平台无关性解释执行多线程简单性Java语法在设计的时候尽可能接近C++,但是舍弃了一些难以理解和比较少使用的特性,是C+......
  • 【Java复健指南08】OOP中级03【完结】-Object类和一些练习
    前情回顾:https://www.cnblogs.com/DAYceng/category/2227185.htmlObject类equals方法"=="与equals的区别"=="是一个比较运算符双等号既可以判断基本类型,又可以判断引......
  • 学习笔记-JAVA安全
    JAVA安全免责声明本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.CTFwritupBUU-Java逆向解密代码混淆h......
  • 学习笔记-JAVA代码审计
    JAVA代码审计免责声明本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.相关文章一次从内网到外网,黑盒到白盒的......
  • 学习笔记-JAVA反序列化
    JAVA反序列化免责声明本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.简介序列化是让Java对象脱离Java运......
  • Java对象的生命周期
    分享知识传递快乐 Java对象的生命周期包括创建、使用、回收三个过程。 1、对象的创建当运行时执行代码遇到new指令、反序列化、反射、克隆时会创建新的对象。创建对象的......
  • Java中static、final、static final的区别
    分享知识传递快乐 finalfinal可以修饰:属性,方法,类,局部变量(方法中的变量)final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。final修饰的属性跟具体对......
  • mybatis-java中的几类错误
    目录mybatis-java中的几类错误1.第一种错误类型1.1namespace1.2一致性问题1.3构建1.4配置文件导不出来2.第二种类型错误2.1Error:java:错误:不支持发行版本2.2Except......
  • Java链式编程和Lombok实现链式编程
    分享知识传递快乐一、Java链式编程1.什么是链式编程链式编程的原理就是返回一个this对象,就是返回对象本身,以达到链式编程的效果。链式编程比较简单,只要returnthis即可具......
  • java 数组新增
    数组由于一开始就设定了长度,所以是不能直接新增的。但是可以通过其他方法来实现。思路1:通过Arrays.asList()方法转换为ArrayList,调用ArrayList的add方法进行新增,最后再调......