Java 第10天 面向对象(下)多态

写在前言 : 学习资源B站是最好的也是很全面。
1 、现在出去面试,面试官老是会问你一句话Java 怎么样?
不管是大数据岗位还是数据库都会问一句。 回来痛下决心,决定探索下这门语言的精髓,大数据很多框架也都是Java 写的,的确懂一门语言,比较稳妥。路也宽敞!!!不然就和吃饭没筷子,那么尴尬。把每天学习到的 Java知识分享到这里会。直到能自己写个复杂一点Dome得出来。
2、为了监督自己探索这门语言的动力与决心。特此这段话放到前面!!!
3、挑战下自己 到底是笨 还是学不会,还是不想学。 好运

一、什么是多态

多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。

对面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。

多态性:可以理解为一个事物的多种形态。

1、何为多态性:
对象的多态性:父类引用指向子类对象(或子类的对象赋给父类的引用)

Person p1 = new Man();

2、多态的使用:
虚拟方法的调用
有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的子类重写父类的方法。
总结:编译,看左边;运行看右边。

3、多态的使用前提:
①类的继承关系
②方法的重写

4、多态要有自父类的继承关系。
5、多态性适用于方法、不适用于属性!!!


二、多态实现的条件

Java 实现多态有 3 个必要条件:继承、重写和向上转型。
只有满足这 3 个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。

  • 继承:在多态中必须存在有继承关系的子类和父类。
  • 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
    向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。

三、举例

<眼看千遍,不如手工一遍。>

package Work_ZQ2;

/**

  • 多态性的使用举例:
    */
    public class AnimalTest {
    public static void main(String[] args) {
    AnimalTest a = new AnimalTest();
    a.func(new dog());
    a.func(new cat());

    }
    public void func(Animal animal){
    animal.eat();
    animal.shout();
    }
    }

class Animal{
public void eat(){
System.out.println(“动物:吃”);
}
public void shout(){
System.out.println(“动物:叫”);
}
}
// 重写了父类的方法
class dog extends Animal{
public void eat(){
System.out.println(“狗喜欢吃骨头”);
}
public void shout(){
System.out.println(“狗是: 汪 汪 汪”);
}
}

// 重写了父类的方法

class cat extends Animal{
public void eat(){
System.out.println(“猫喜欢吃鱼”);
}
public void shout(){
System.out.println("猫是: 瞄 瞄 瞄 ");
}
}
在这里插入图片描述

四、equals 与== 的使用

1、 equals:

  • 明确一点equals 比较的是内容。
  • equals ()方法的使用
    1、是一个方法,不是运算符
    2、只能适用数据类型。
    3、在object 类中定义的equals()和 ==作用是相同的。比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体。
    4、像String、Date、File、包装类都重写了Object类中的equals()方法。重写以后,比较的不是两个引用地址是否相同,而是比较两个对象的 “实体是否相同 ”。。

2、==:运算符

1、可以使用在基本数据类型变量和引用数据型变量中。
2、如果比较的基本数据类型变量:比较变量保存的数据是否相等。(不一定类型相同)
如果比较的引用数据类型变量:比较两个对象的地址是否相同,即两个引用是否指向同一个对象实体。

3、栗子:

在这里插入图片描述

4、关于二者之间的区别:面试题

在这里插入图片描述
 
 
如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论”“收藏”一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章