首页 > 编程语言 >Java知识26 多态 (重点巩固)【多测师】

Java知识26 多态 (重点巩固)【多测师】

时间:2022-10-26 11:02:04浏览次数:47  
标签:重写 26 调用 Java 子类 多态 Cat 父类 方法

一、多态
多态就是同一个行为有多个不同表现形式和形态的能力
比如:
flash界面按F1按键弹出是AS 3帮助文档
在Word下弹就是Word帮助

二、多态存在的三个必要条件
继承、重写、父类引用指向子类对象
Parent p = new Child();

三、使用多态调用方法时,先检查父类中是否有该方法,没有则编译错误,有 再去调用子类的同名方法
实例如下:
abstract class Animal { //定义了一个抽象类
abstract void eat(); //定义一个抽象方法
}

class Cat extends Animal { //子类Cat继承父类Animal
public void eat() { //定义吃的方法
System.out.println("吃鱼");
}

public void work() {
System.out.println("抓老鼠");
}
}

class Dog extends Animal { //子类Dog继承父类Animal类
public void eat() {
System.out.println("吃骨头");
}

public void work() {
System.out.println("看家");
}
}

方法调用如下:
public class Test {
public static void main(String[] args) {
show(new Cat()); // 以 Cat 对象调用 show 方法、new一个对象,然后直接调用这个对象的show()方法。
show(new Dog()); // 以 Dog 对象调用 show 方法

Animal a = new Cat(); // 向上转型
a.eat(); // 调用的是 Cat 的 eat
Cat c = (Cat) a; // 向下转型
c.work(); // 调用的是 Cat 的 work
}

public static void show(Animal a) {
a.eat();
// 类型判断
if (a instanceof Cat) { // 猫做的事情
Cat c = (Cat) a;
c.work();
} else if (a instanceof Dog) { // 狗做的事情
Dog c = (Dog) a;
c.work();
}
}
}

四、虚方法
方法的重新:子类能够重新父类的方法
子类对象调用重新的方法 调用的是子类的方法 而不是父类中被重写的方法
要想调用父类中被重写的方法 则必须使用关键字super
如下:实例化了俩个对象:一个使用Salary引用s,另一个使用Employee引用e.
Salary s = new Salary("员工 A", "北京", 3, 3600.00);
Employee e = new Salary("员工 B", "上海", 2, 2400.00);

五、多态的实现方式
方式一:重写(详情Java知识25 重写和重载)
方式二:生活中接口最具代表性的就是插座
方式三:抽象类和抽象方法

六、多态总结
1.使用父类类型的引用指向子类的对象
2.该引用只能调用父类中定义的方法和变量
3.子类重写父类的方法,调用这个方法的时候,会调用子类中的这个方法(动态连接、动态调用)
4.变量不能被重写,重写的概念只针对方法 重写了变量编译会直接报错,类的属性变量是可以重写的。

七、构造子类对象时的构造方法的调用顺序
1.先调用超类的构造方法,多重超类首先调用最远超类的方法
2.然后再执行当前子类的构造方法

 



标签:重写,26,调用,Java,子类,多态,Cat,父类,方法
From: https://blog.51cto.com/u_15846941/5797423

相关文章

  • 力扣561(java&python)-数组拆分(简单)
    题目:给定长度为 2n 的整数数组nums,你的任务是将这些数分成 n对,例如(a1,b1),(a2,b2),...,(an,bn),使得从1到 n的min(ai,bi)总和最大。返回该最大......
  • java.sql.SQLException: MONTH 报错解决方法
    idea控制台报错:java.sql.SQLException:MONTHErrorattemptingtogetcolumn'xxx'fromresultset.Cause:java.sql.SQLException:MONTH;MONTH;nestedexceptio......
  • 20221026 英文单词
    1、provision 2、wrestle   3、admittance  4、authorize  5、asset  6、image  7、apprenticeship  8、business  9、getyour......
  • JAVA--Map介绍和常用方法
    Map     接口实现类Node转换为接口Entry,属于动态绑定,向上转型。Object引用转为子类是向下转型  这就是一个Entry接口的引用指向了它实现类Node的对象(接口......
  • JAVA 进阶完结
    1.接口  这个类中有了新的关键字abstract并且里面的方法没有括号这样的类 上图就是抽象函数与抽象类 那么继承抽象类的子类需要做什么工作呢  2.代......
  • JAVA---Set集合底层源码分析
    1.Set集合介绍      常用方法,添加,删除和遍历 Set接口对象不能使用索引获取,他是无序的,没有索引。set集合无序,所以没有修改和查看某个元素,因为某个位置上是......
  • 力扣122(java&python)-买卖股票的最佳时机 II(中等)
    题目:给你一个整数数组prices,其中 prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有一股股票。你也......
  • Mac安装Opencv带Java版本
    使用Homebrew安装OpenCV4brewinstallopencv进入安装目录cd/usr/local/Cellar/opencv首先检查ApacheAnt有没有安装,没有的话就用homebrew安装:brewinsta......
  • win7 java环境变量配置
    1.准备一台电脑网络2.查看电脑配置选择电脑界面上的计算机(或者我的电脑电脑图标),按下鼠标右键,出现菜单,看到有’属性’这一项,点击确定查看是32位操作系统还......
  • 公司新入职一个中级 Java 开发,4 行代码写出了 3 个异常,我真的服了。。
    作者:l拉不拉米链接:https://juejin.cn/post/7031445206152577061一、前言Hello大家好,我是l拉不拉米,今天带来一个真实案例,让大家更深刻的理解空指针异常。公司刚入职了......