首页 > 编程语言 >Java多态性

Java多态性

时间:2023-05-07 16:45:01浏览次数:43  
标签:Java 多态性 void System 子类 println public out

Java多态性

面向对象三大特征:封装性,继承性,多态性.

extends继承或者implements实现,是多态的前提

一个对象拥有多种形态这就是:对象的多态性

image-20230507100303689

多态的实现

代码中体现多态性:父类引用指向子类对象

格式

父类名称 对象名 = new 子类名称();

或者

接口名称 对象名 = new 实现类名称();

image-20230507101819419

代码示例

Fu类

public class Fu {
    public void method() {
        System.out.println("父类成员方法");
    }

    public void methodFu() {
        System.out.println("我是父类独有的成员方法");
    }
}


Zi类

public class Zi extends Fu {
    public void method()
    {
        System.out.println("子类成员方法");

    }
}

Main方法

public class Multi {
    public static void main(String[] args) {
        //使用多态的写法
        //左侧父类引用,指向了右侧的子类对象

        Fu one = new Zi();//
        one.method();//还是优先使用子类方法,new的谁将优先使用谁
        one.methodFu();//如果子类没有会向上寻找父类方法

    }
}

多态中成员变量的访问特点

访问成员变量的两种方式

  1. 直接通过对象名称访问成员变量,看等号左边是谁,优先用谁,没有,则向上找.
  2. 间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找.

image-20230507103007035

Fu类

public class Fu {
    int num=10;
  public void show()
  {
      System.out.println(num);
  }

}

public class Fu {
    int num=10;
  public void show()
  {
      System.out.println(num);
  }

}

Zi类

public class Zi extends Fu{
    int num =20;
    int age=20;
    public void show()
    {
        System.out.println(num);
    }
}

Main方法

public class Main {
    public static void main(String[] args) {
        Fu one = new Zi();//多态写法
        System.out.println(one.num);//父类 10;
//        System.out.println(one.age);子类当中才有age错误写法
        System.out.println("=========");
        //如果子类没有覆盖重写,就是父:10;
        //如果子类覆盖重写之后就是子:20;
        one.show();


    }
}

多态中成员方法的使用特点

在多态代码中,成员方法的访问规则是:

看new的是谁,就优先用谁,没有则向上找.

口角:编译看左边,运行看右边.

和成员变量的区别

成员变量:编译看左边,运行还看左边.

成员方法:编译看左边,运行看右边

image-20230507161455926

代码示例

父类

public class Fu {
    public void method()
    {
        System.out.println("父类方法");
    }
    public void methodFu()
    {
        System.out.println("父类独有方法");

    }
}

子类

public class Zi extends Fu{
    @Override
    public void method() {
        System.out.println("子类方法");
    }
    public void methodZi()
    {
        System.out.println("子类独有方法");
    }
}

main方法

public class Main {
    public static void main(String[] args) {
        Fu one = new Zi();
        one.method();//父子都有优先用子
        one.methodFu();//子类没有,父类有,优先用父类
//        one.methodZi();错误写法
        //编译看左边,Fu类没有该方法编译报错,不能这样写
    }
}

使用多态的好处

image-20230507163121004

无论右边new的时候换成哪个子类对象,等号左边调用方法都不会变化.

对象的向上转型

标签:Java,多态性,void,System,子类,println,public,out
From: https://www.cnblogs.com/harper886/p/17379510.html

相关文章

  • Java javadoc 标准和注释规范
    (一)基本定义Javadoc是Sun公司提供的一个技术,从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档(二)使用方式javadoc源文件名.javajavadoc-d文档存放目录源文件名.java通过IDEA生成Javadoc:Tools->GenerateJavaDoc(三)基本标签标签说明@......
  • javaDoc生成文档
    1.https://docs.oracle.com/javase/8/docs/api/(在线API帮助文档) 2.参数 ......
  • C++虚函数详解:多态性实现原理及其在面向对象编程中的应用
    在面向对象的编程中,多态性是一个非常重要的概念。多态性意味着在不同的上下文中使用同一对象时,可以产生不同的行为。C++是一种面向对象的编程语言,在C++中,虚函数是实现多态性的关键什么是虚函数虚函数是一个在基类中声明的函数,它可以被子类重写并提供不同的实现。在C++中,使用关......
  • 字符串的反转---Java
    定义一个方法,实现字符串的反转键盘输入一个字符串,调用方法后,输出结果 例如: 键盘输入:abc 输出结果:cbapackagestring.practice;/**定义一个方法,实现字符串的反转*键盘输入一个字符串,调用方法后,输出结果*例如:*键盘输入:abc*输出结果:cba*/importjava.util.......
  • flume java.lang.OutOfMemoryError: GC overhead limit exceeded
    http://java-boy.iteye.com/blog/463454解决办法:<1>ps-aux|grepflume查看刚才启动的flume进程,发现如下信息/usr/jdk/bin/java-Xmx20m-Dflume.root.logger=INFO-cpconf<2>于是看一个flume-ng的python脚本,发现JAVA_OPTS="-Xmx20m"问题就是出在这里了,然后我把flume-ng脚本......
  • JVM系列---【使用jmx_agent监控java程序】
    使用jmx_agent监控java程序1.下载jmx_prometheus_javaagent.jar从https://github.com/prometheus/jmx_exporter/releases下载最新版本的jmx_prometheus_javaagent.jar2.创建一个名为jmx_exporter_config.yml的文件用于配置jmx_prometheus_javaagent.jar的监控参数。该文件应......
  • Java IO流详解
    文章和代码已经归档至【Github仓库:https://github.com/timerring/java-tutorial】或者公众号【AIShareLab】回复java也可获取。文件文件,对我们并不陌生,文件是保存数据的地方。文件在程序中是以流的形式来操作的。流:数据在数据源(文件)和程序(内存)之间经历的路径输入流:数据从数......
  • Java练手项目,后续1
    阅读本文需注意,作者是辣鸡新手,有些注释和解释可能不太对,欢迎大佬们前来指正,洗耳恭听。关于str.char(0);查看下面的链接学习(其他人的)https://blog.csdn.net/ammmd/article/details/3014251关于异常处理这部分:(菜鸟教程中的)https://www.runoob.com/java/java-exceptions.html关......
  • JavaScript 笔记
    JavaScript简介JavsScript于1995年由BrendanEich用时10天写出,用于网景浏览器。最初的名字叫LiveScript,也被部分员工称为Mocha。那时Java语言很流行,出于商业化的考量,更名为JavaScript,但两者之间没有关联。最早的JS作为脚本语言给浏览器增加一些诸如鼠标跟随等交......
  • 使用 JavaScript连接Oracle 数据库(js连接oracle)
    原文链接 在建立Web交互应用程序时,一般使用JavaScript语言作为表现层,而Oracle作为背后真正的数据库。连接JavaScript和Oracle数据库需要一组技术,可以实现将JavaScript执行的数据请求发送到服务器上的Oracle数据库,这样就可以访问和操作Oracle数据库中的相关内容。 在建立Web......