人生苦短我学Java-9-面向对象三大特性之多态

一、多态

1、什么是多态?

  • 多种形态
  • 是指一个对象在不同时刻,表现出来不同的状态
  • 比如说,水滴,液态、气态、固态。

2、多态的前提条件

  • 要有继承关系
  • 要有方法重写
  • 要有父类引用指向子类对象

口诀:
1.在多态,成员变量/静态方法/静态变量 编译、运行看左边。
2.在多态,方法重写编译看左边、运行看右边。

package com.ppl.day;
/*
com.ppl.day:学习项目
@user:广深-小龙
@date:2022/1/3 15:51
*/

/*
口诀:
1.在多态,成员变量/静态方法/静态变量 编译、运行看左边。
2.在多态,方法重写编译看左边、运行看右边。
*/
public class Day13 {
    public static void main(String[] args) {
        Fu1 f = new Zi1();
        System.out.println(f.i);
        System.out.println(f.j);  // Fu1 没有变量 j

        f.print();
        f.printFu();
    }
}

class Fu1 {
    int i = 1;
    int j = 3;

    public void printFu() {
        System.out.println("printFu");
    }

    public void print() {
        System.out.println("Fu1");
    }
}

class Zi1 extends Fu1 {
    int j = 2;

    public void print() {
        System.out.println("Zi1");
    }
}

输出:

1
3
Zi1
printFu

 3、多态的优劣

优点:

  • 提高代码扩展性
  • 父类引用作为形式参数,子类对象作为实际参数
/*
多态的应用
1.提高代码扩展性
2.父类引用作为形式参数,子类对象作为实际参数
*/
class Anima {
    public void eat() {
    }
}

class AnimalTool {

    // 继承结合多态的应用,一个工具类的方法即可
    public static void print(Anima anima) {
        anima.eat();
    }
    
    // 原每个子类调用时,都需要+一个工具类方法
//    public static void print(Cat cat) {
//        cat.eat();
//    }
//    public static void print(Dog dog) {
//        dog.eat();
//    }
}

class Cat extends Anima {
    public void eat() {
        System.out.println("猫吃鱼...");
    }
}

class Dog extends Anima {
    public void eat() {
        System.out.println("狗啃骨头...");
    }
}

缺点:

  • 父类引用不能使用子类中的内容,解决:向下转型
package com.ppl.day;
/*
com.ppl.day:学习项目
@user:广深-小龙
@date:2022/1/3 16:46
*/

public class Day14 {
    public static void main(String[] args) {
        PPerson p = new Student();  // 向上转型
        p.eat();    ////        p.play(); // 编译看左边,左边p没该方法,所以报错,需要向下转型

        Student s = (Student) p;  // 向下转型
        s.play();
    }
}

class PPerson {
    public void eat() {
        System.out.println("吃...");
    }
}

class Student extends PPerson {
    public void eat() {
        System.out.println("学生吃面条...");
    }

    public void play() {
        System.out.println("学生玩游戏...");
    }
}

注意:PPerson p = new Student(); // 向上转型

向下转型时必须是 Student x = (Student)p,不能是其它;否则运行时报错,编译不会报错。ClassCastException

多态:同一个对象在不同时刻表现不同的状态。可上下转型。如狗 --> 动物 --> 生物

 欢迎来大家QQ交流群一起学习:482713805,博主微信+:gogsxl

推荐这些技术文章:

继承:面向对象三大特性之一

extends 继承

//银行卡
public class Account {
String acID;
String username;
String password;
double balance;
//存款的方法
public void deposit(double money){
System.out.println("...

Java面向对象(二)

面向对象编程(二)对象的转型:分 向上转型 和 向下转型(强制类型转换)向上转型:父类的引用指向子类的对象,但是不能使用子类多出来的方法。如: public class Test{ public static void main(String args[]){ Person p = new Person(); p.playWithAnimal(new Dog()); } } class Anim...

Java基础5_面向对象

面向对象
面向对象编程(OOP,Object Oriented Programming),本质就是以类的方式组织代码,以对象的组织(封装)数据。
对象的创建分析
使用new关键字创建对象
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及队形中构造器的调用。
类中构造器也称构造方法,实在进行创建对象的时候必须调用的,并且构造器有以下两个特点:
1.必须和类的...

面向对象的三大特性

封装:把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法。
继承:子类继承父类,可以继承父类的方法和属性,提高了代码的复用性。
多态:1.子类继承父类
   2.子类重写父类方法
   3.父类引用指向子类对象

...

人生苦短我学Java-8-面向对象三大特性之继承

一、继承 1、面向对象三大特性之继承。 较少代码的冗余,提高代码的复用性; 提供扩展性; 为多态提供了前提; 继承格式为:public class A extends B{} A:子类、派生类、subclass B:父类、超类、基类、superclass 体现: —旦子类A继承父类B以后,子类A中就获取了父类B中声明的结构:属性、方法。 父类中private私有属性或者私有方法,子类继...

Java面向对象编程02——面向对象的三大特征

Java面向对象编程02——面向对象的三大特征
目录Java面向对象编程02——面向对象的三大特征封装继承supersuper注意点VS this补充this重写多态实例演练instanceof 和 类型转换instanceof实例类型转换补充1--Static总结class中结构静态导入包补充2--抽象类补充3--接口补充3--内部类1.成员内部类2.静态内部类3.局部内部类4.匿名内部类
封...

面向对象三大特性(Java):封装继承多态——

封装

该露的露,该藏的藏

我们程序设计要追求"高内聚,低耦合"。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。

封装(数据的隐藏)

通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。

记住这句话就够了:属性私有,get/set

package com.oop.Test04;
//类 private:...

Java第十三课---面向对象(多态)

多态

动态编译:类型:可扩展性

即同一方法可以根据发送对象的不同而采用多种不同的行为方式

一个对象的实际类型是确定的,但可以指向对象的引用类型有很多(父类,有关系的类)

多态存在的条件

有继承关系

子类重写父类方法

父类引用指向子类对象

注意:多态是方法的多态,属性没有多态性

instance of (类型转换)引用类型

 
多态注意事项...

Java方法调用

方法调用
1.若不是静态类,在调用的时候要将此方法实例化。
package com.xiaochen.method;

public class Use {
public static void main(String[] args) {
student student = new student();
student.say();
}
}...

java三大特性之一:继承(什么是super)

super注意点: 1.super调用父类的构造方法,必须在构造方法的第一个 2.super 必须只能出现在子类的方法或者构造方法中 3.super和this不能同时调用构造方法VS this: 代表的对象不同: this:本身调用者这个对象 super:代表分类对象的应用 前提:this:有没有继承都可以使用 super...

文章标题:人生苦短我学Java-9-面向对象三大特性之多态
文章链接:https://www.dianjilingqu.com/3844.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>