美文网首页
新手小白学JAVA 面向对象之多态

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

作者: Jycoding | 来源:发表于2022-07-18 15:08 被阅读0次

比如,你的女盆友让你买点水果回来,不管买回来的是苹果还是西瓜,只要是水果就行,这个就是生活中多态的体现

多态的前提1:是继承

多态的前提2:要有方法的重写

父类引用指向子类对象,如:Animal a = new Cat();

多态中,编译看左边,运行看右边

package cn.tedu.oop2;

/*本类用作多态的入门案例*/

public class TestDemo {

    public static void main(String[] args) {

        //6.创建“纯纯的”对象用于测试

        Animal a = new Animal();

        Cat c = new Cat();

        Dog d = new Dog();

        a.eat();//小动物Animal吃啥都行~调用的是父类自己的功能

        c.eat();//小猫爱吃小鱼干~调用的是子类重写后的功能

        d.eat();//小狗爱吃肉骨头~调用的是子类重写后的功能

        /*2.父类对象不可以使用子类的特有功能*/

        //a.jump();//报错,Animal类里并没有这个方法

        //a.run();//报错,Animal类里并没有这个方法

        c.jump();//小猫Cat跳的老高啦~,子类可以调用自己的功能

        d.run();//小狗Dog跑的老快啦~,子类可以调用自己的功能

        //7.创建多态对象进行测试

        /*3.口诀1:父类引用指向子类对象

        * 解释:创建出来的子类对象的地址值,交给父类类型的引用类型变量来保存*/

        Animal a2 = new Cat();//Cat类对象的地址值交给父类型变量a2来保存

        Animal a3 = new Dog();//Dog类对象的地址值交给父类型变量a3来保存

        //8.测试多态对象

        /*4.口诀2:编译看左边,运行看右边

        * 解释:必须要在父类定义这个方法,才能通过编译,把多态对象看作是父类类型

        *      必须要在子类重写这个方法,才能满足多态,实际干活的是子类*/

        a2.eat();//小猫爱吃小鱼干~,多态对象使用的是父类的定义,子类的方法体

    }

}

/*1.多态的前提:继承+重写*/

//1.创建父类

class Animal{

    //3.创建父类的普通方法

    public void eat(){

        System.out.println("小动物Animal吃啥都行~");

    }

}

//2.1创建子类1

class Cat extends Animal{

    //4.1添加重写的方法

    public void eat(){

        System.out.println("小猫爱吃小鱼干~");

    }

    //5.1添加子类的特有功能

    public void jump(){

        System.out.println("小猫Cat跳的老高啦~");

    }

}

//2.2创建子类2

class Dog extends Animal{

    //4.2添加重写的方法

    @Override

    public void eat(){

        System.out.println("小狗爱吃肉骨头~");

    }

    //5.2添加子类的特有功能

    public void run(){

        System.out.println("小狗Dog跑的老快啦~");

    }

}

前提:多态对象把自己看做是父类类型

成员变量: 使用的是父类的

成员方法: 由于存在重写现象,所以使用的是子类的

静态成员: 随着类的加载而加载,谁调用就返回谁的

package cn.tedu.oop2;

/*本类用于测试多态成员的使用情况*/

public class TestDemo2 {

    public static void main(String[] args) {

        //7.创建纯纯的子类对象

        Dog2 d = new Dog2();

        System.out.println(d.sum);//20,子类自己的属性

        d.eat();//小狗爱吃肉包子,子类自己的方法

        //8.创建多态对象

        /*口诀1:父类引用指向子类对象*/

        /*口诀2:编译(保存)看左边,运行(效果)看右边*/

        Animal2 a = new Dog2();

        /*多态中,成员变量使用的是父类的*/

        System.out.println(a.sum);//10

        /*多态中,方法的声明使用的是父类的,方法体使用的是子类的*/

        a.eat();//小狗爱吃肉包子

        /*多态中,调用的静态方法是父类的,因为多态对象把自己看作是父类类型

        * 直接使用父类中的静态资源*/

        a.play();//没有提示,玩啥都行~

        Animal2.play();

    }

}

//1.创建父类

class Animal2{

    //3.创建父类的成员变量

    int sum = 10;

    //4.创建父类的普通方法

    public void eat(){

        System.out.println("吃啥都行~");

    }

    //9.1定义父类的静态方法play

    public static void play(){

        System.out.println("玩啥都行~");

    }

}

//2.创建子类

class Dog2 extends Animal2{

    //5.定义子类的成员变量

    int sum = 20;

    //6.重写父类的方法

    @Override

    public void eat(){

        System.out.println("小狗爱吃肉包子");

    }

    //9.2创建子类的静态方法play

    //@Override

    /*这不是一个重写的方法,只是恰巧在两个类中出现了一模一样的两个静态方法

    * 静态方法属于类资源,只有一份,不存在重写的现象

    * 在哪个类里定义,就作为哪个类的资源使用*/

    public static void play(){

        System.out.println("小狗喜欢玩皮球~");

    }

}

相关文章

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

    比如,你的女盆友让你买点水果回来,不管买回来的是苹果还是西瓜,只要是水果就行,这个就是生活中多态的体现 多态的前提...

  • Java进阶 | 从整体上观察面向对象

    一、面向对象 面向对象是Java编程中最核心的思想,基本特征:继承、封装、多态。 1、特征之封装 将结构、数据、操...

  • Java进阶 | 从整体上观察面向对象

    一、面向对象 面向对象是Java编程中最核心的思想,基本特征:继承、封装、多态。 1、特征之封装 将结构、数据、操...

  • 宅男知识大补丸 学多态 认包包

    java零基础入门-面向对象篇(十) 多态 面向对象的三大特征,封装,继承我们讲完了,这次来讲多态。 多态就是指一...

  • java基础系列02--面向对象

    java面向对象 封装(encapsulation) 继承(inheritance) 多态(polymorphis...

  • 面向对象三大特性(一):封装

    面向对象有三大特性:封装、继承和多态。注意,是面向对象的三大特性而不是Java的三大特性,Java只是面向对象语言...

  • 深入深刻深到不能再深的理解java中的重载和重写

    面向对象的三个特性 面向对象有三个重要的特性:多态,继承,封装。 多态的表现 多态的在java中的应用体现在方法的...

  • Java笔记

    Java基础 Java面试通关要点 1.面向对象的特征 封装 继承 多态 封装继承多态 2.final,final...

  • java中多态

    点个关注不迷路~~ 多态是java面向对象思想极为重要的一部分,在学到java多态时,感觉学的特别迷,遂参考了ja...

  • Java 面向对象-多态

    1.多态概述 什么是多态? 多种状态,通一个对象在不同情况下表现出不同的状态或行为 Java中实现多态的步骤 ·要...

网友评论

      本文标题:新手小白学JAVA 面向对象之多态

      本文链接:https://www.haomeiwen.com/subject/mqxjirtx.html