多态的练习

练习1:笔试&面试

题目1:继承成员变量和继承方法的区别

class Base {
    int count = 10;
    public void display() {
        System.out.println(this.count);
    }
}

class Sub extends Base {
    int count = 20;
    public void display() {
        System.out.println(this.count);
    }
}

public class FieldMethodTest {
    public static void main(String[] args){
        Sub s = new Sub();
        System.out.println(s.count);
        s.display();
        Base b = s;
        System.out.println(b == s);
        System.out.println(b.count);
        b.display();
    }
}
 

题目2:

//考查多态的笔试题目:
public class InterviewTest1 {

    public static void main(String[] args) {
        Base base = new Sub();
        base.add(1, 2, 3);

//        Sub s = (Sub)base;
//        s.add(1,2,3);
    }
}

class Base {
    public void add(int a, int... arr) {
        System.out.println("base");
    }
}

class Sub extends Base {

    public void add(int a, int[] arr) {
        System.out.println("sub_1");
    }

//    public void add(int a, int b, int c) {
//        System.out.println("sub_2");
//    }

}
 

题目3:

//getXxx()和setXxx()声明在哪个类中,内部操作的属性就是哪个类里的。
public class InterviewTest2 {
    public static void main(String[] args) {
        Father f = new Father();
        Son s = new Son();
        System.out.println(f.getInfo());//atguigu
        System.out.println(s.getInfo());//尚硅谷
        s.test();//尚硅谷  atguigu
        System.out.println("-----------------");
        s.setInfo("大硅谷");
        System.out.println(f.getInfo());//atguigu
        System.out.println(s.getInfo());//大硅谷
        s.test();//大硅谷  atguigu
    }
}

class Father {
    private String info = "atguigu";

    public void setInfo(String info) {
        this.info = info;
    }

    public String getInfo() {
        return info;
    }
}

class Son extends Father {
    private String info = "尚硅谷";
    
    public void setInfo(String info) {
        this.info = info;
    }

    public String getInfo() {
        return info;
    }
    
    public void test() {
        System.out.println(this.getInfo());
        System.out.println(super.getInfo());
    }
}

题目4:多态是编译时行为还是运行时行为?

//证明如下:
class Animal  {
    protected void eat() {
        System.out.println("animal eat food");
    }
}

class Cat  extends Animal  {
    protected void eat() {
        System.out.println("cat eat fish");
    }
}

class Dog  extends Animal  {
    public void eat() {
        System.out.println("Dog eat bone");
    }
}

class Sheep  extends Animal  {
    public void eat() {
        System.out.println("Sheep eat grass");
    }
}

public class InterviewTest {
    public static Animal  getInstance(int key) {
        switch (key) {
        case 0:
            return new Cat ();
        case 1:
            return new Dog ();
        default:
            return new Sheep ();
        }

    }

    public static void main(String[] args) {
        int key = new Random().nextInt(3);
        System.out.println(key);

        Animal  animal = getInstance(key);
        animal.eat(); 
    }
}

练习2:

class Person {
    protected String name="person";
    protected int age=50;
    public String getInfo() {
              return "Name: "+ name + "\n" +"age: "+ age;
    }
}
class Student extends Person {
    protected String school="pku";
    public String getInfo() {
                return  "Name: "+ name + "\nage: "+ age 
              + "\nschool: "+ school;
    }    
}
class Graduate extends Student{
    public String major="IT";
    public String getInfo()
    {
        return  "Name: "+ name + "\nage: "+ age 
              + "\nschool: "+ school+"\nmajor:"+major;
    }
}
 

建立InstanceTest 类,在类中定义方法method(Person e); 在method中: (1)根据e的类型调用相应类的getInfo()方法。 (2)根据e的类型执行: 如果e为Person类的对象,输出: “a person”; 如果e为Student类的对象,输出: “a student” “a person ” 如果e为Graduate类的对象,输出: “a graduated student” “a student” “a person”  

解题:

package chapter07_oop2_teacher.src.com.atguigu06.polymorphism.exer3;/*** ClassName: InstanceTest* Description:*      建立InstanceTest 类,在类中定义方法method(Person e);*      在method中:*      (1)根据e的类型调用相应类的getInfo()方法。*      (2)根据e的类型执行:*      如果e为Person类的对象,输出:*      “a person”;*      如果e为Student类的对象,输出:*      “a student”*      “a person ”*      如果e为Graduate类的对象,输出:*      “a graduated student”*      “a student”*      “a person”* @Author 尚硅谷-宋红康* @Create 9:13* @Version 1.0*/
public class InstanceTest {public static void main(String[] args) {InstanceTest test = new InstanceTest();test.method(new Student());}public void method(Person e){System.out.println(e.getInfo());//方式1:
//        if(e instanceof Graduate){
//            System.out.println("a graduated student");
//            System.out.println("a student");
//            System.out.println("a person");
//        }else if(e instanceof Student){
//            System.out.println("a student");
//            System.out.println("a person");
//        }else{
//            System.out.println("a person");
//        }//方式2if(e instanceof Graduate){System.out.println("a graduated student");}if(e instanceof Student){System.out.println("a student");}if(e instanceof Person){System.out.println("a person");}}
}

package chapter07_oop2_teacher.src.com.atguigu06.polymorphism.exer3;/*** ClassName: Graduate* Description:** @Author 尚硅谷-宋红康* @Create 9:15* @Version 1.0*/
public class Graduate extends Student{public String major="IT";public String getInfo(){return  "Name: "+ name + "\nage: "+ age+ "\nschool: "+ school+"\nmajor:"+major;}
}

package chapter07_oop2_teacher.src.com.atguigu06.polymorphism.exer3;/*** ClassName: Person* Description:** @Author 尚硅谷-宋红康* @Create 9:14* @Version 1.0*/
public class Person {protected String name="person";protected int age=50;public String getInfo() {return "Name: "+ name + "\n" +"age: "+ age;}
}

package chapter07_oop2_teacher.src.com.atguigu06.polymorphism.exer3;/*** ClassName: Student* Description:** @Author 尚硅谷-宋红康* @Create 9:14* @Version 1.0*/
public class Student extends Person {protected String school="pku";public String getInfo() {return  "Name: "+ name + "\nage: "+ age+ "\nschool: "+ school;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解ThreadLocal原理

目录 1- 什么是ThreadLocal ?2- ThreadLocal的作用?ThreadLocal实现线程间资源隔离ThreadLocal实现线程内资源共享 3- ThreadLocal 原理3-1 ThreadLocalMap3-2 ThreadLocalMap的扩容🔑1. 为什么会发生扩容?🔑2. Thread…

Python图像表征空间频率域处理和模式分析

🎯要点 Python空间滤波器:🎯卷积计算实现均值滤波器。🎯非线性中值滤波器。🎯最大值/最小值滤波器。🎯一阶导数滤波器:索贝尔(sobel)滤波器、普鲁伊特(Prewitt)滤波器、坎尼(Canny)滤波器。&am…

将图像转换为ASCII艺术形式

将图像转换为ASCII艺术形式 在本文中,我们将介绍一个使用OpenCV库将图像转换为ASCII艺术形式的简单程序。ASCII艺术是一种使用字符来表现图像的艺术形式,通过在终端或文本文件中显示字符的不同密度和颜色来模拟图像。这种技术已经存在了几十年&#xff…

【MySQL】7.MHA高可用配置及故障切换

什么是MHA MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件 mha用于解决mysql的单点故障问题; 出现故障时,mha能在0~30秒内自动完成故障切换; 并且能在故障切换过程中&#xff0…

史上最强 PyTorch 2.2 GPU 版最新安装教程

一 深度学习主机 1.1 配置 先附上电脑配置图,如下: 利用公司的办公电脑对配置进行升级改造完成。除了显卡和电源,其他硬件都是公司电脑原装。 1.2 显卡 有钱直接上 RTX4090,也不能复用公司的电脑,其他配置跟不上。…

ARM FVP平台的terminal窗口大小如何设置

当启动ARM FVP平台时,terminal窗口太小怎么办?看起来非常累眼睛,本博客来解决这个问题。 首先看下ARM FVP平台对Host主机的需求: 通过上图可知,UART默认使用的是xterm。因此,我们需要修改xterm的默认字体设…

C++语言学习(一)——关键字、命名空间、输入输出

1. C关键字 C总计63个关键字,C语言32个关键字 2. 命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本…

vue3从精通到入门9:计算属性computed

在 Vue 3 中,computed 是一个用于创建计算属性的工具,它基于组件的响应式依赖进行复杂的计算,并返回一个新的响应式引用。计算属性是 Vue 的一个核心概念,它提供了一种声明式的方式来执行基于其依赖的响应式数据的计算。 compute…

详细总结前中后序、层次遍历二叉树(非递归方法)

二叉树 结构 //二叉树节点结构 class Node<V>{V value;Node left;Node right;}之前一直学的是用递归方法进行前中后序三种遍历方法&#xff0c;没想到用非递归方法也还是挺舒服的&#xff0c;对了解树结构的应用也很有帮助 &#xff08;主要用到的思路就是借助栈或者队列…

yolov5关键点检测-实现溺水检测与警报提示(代码+原理)

基于YOLOv5的关键点检测应用于溺水检测与警报提示是一种结合深度学习与计算机视觉技术的安全监控解决方案。该项目通常会利用YOLOv5强大的实时目标检测能力&#xff0c;并通过扩展或修改网络结构以支持人体关键点检测&#xff0c;来识别游泳池或其他水域中人们的行为姿态。 项…

【机器学习】《机器学习算法竞赛实战》思考练习(更新中……)

文章目录 第2章 问题建模&#xff08;一&#xff09;对于多分类问题&#xff0c;可否将其看作回归问题进行处理&#xff0c;对类别标签又有什么要求&#xff1f;&#xff08;二&#xff09;目前给出的都是已有的评价指标&#xff0c;那么这些评价指标&#xff08;分类指标和回归…

Java入门学习Day04

本篇文章主要介绍了&#xff1a;如何输入数据、字符串拼接、自增自减运算符、类型转换&#xff08;int&#xff0c;double等&#xff09; CSDN&#xff1a;码银 公众号&#xff1a;码银学编程 一、键盘输入练习 Scanner是Java中的一个类&#xff0c;用于从控制台或文件中读…

DOTS:Burst

目录 一&#xff1a;简介 1.1 Getting started 1.2 C# language support 1.2.1 HPC# overview 1.2.1.1 Exception expressions 1.2.1.2 Foreach and While 1.2.1.3 Unsupported C# features in HPC# 1.2.2 Static read-only fields and static constructor support 1.…

STM32-03基于HAL库(CubeMX+MDK+Proteus)输入检测案例(按键控制LED)

文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式&#xff0c;生成代码四、MDK打开生成项目&#xff0c;编写HAL库的按键检测代码五、运行仿真程序&#xff0c;调试代码 一、功能需求分析 搭建完成开发STM32开发环境之后&#xff0c;开始GPIO…

LC 110.平衡二叉树

110. 平衡二叉树 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a; root [3,9,20,null,null,15,7]…

【python】python 测试,为什么我们需要测试,pytest的使用

为什么需要测试 &#x1f525;测试&#xff0c;软件开发的秘密武器&#x1f525; ✨大家好&#xff0c;今天就来跟大家聊聊软件开发中的一项超级重要的环节——测试&#xff01;&#x1f440; &#x1f3af;测试&#xff0c;是软件开发的灵魂&#xff0c;是确保代码正确运行…

MySQL中innodb_status_output_locks含义和用法

innodb_status_output_locks 是一个MySQL系统变量&#xff0c;它决定了是否在 SHOW ENGINE INNODB STATUS 输出中包含详细的锁定信息。其主要用途是帮助分析和诊断InnoDB存储引擎中的锁定问题&#xff0c;比如事务死锁或长时间持有的锁导致的性能问题。 当innodb_status_outpu…

补充知识

补充知识1 内存的本质是对数据的临时存储 内存与磁盘进行交互时&#xff0c; 最小单位是4kb叫做页框(内存)和页帧(磁盘) 也就是&#xff0c; 如果我们要将磁盘的内容加载到内存中&#xff0c; 可是文件大小只有1kb&#xff0c; 我们也要拿出4kb来存他&#xff0c; 多余的就直…

基于Leaflet.js和Turf.js的等值线区间自定义及颜色自适应实践

目录 前言 一、Turf.js等值线相关制作 1、生成方法 2、主要参数 二、实际案例开发 1、新建展示页面 2、等值线生成 3、基于Leaflet的再优化 总结 前言 在气象方面的GIS应用当中&#xff0c;会根据实际的工作需要建立不同的监测站点。气象监测站的主要功能包括&#xff1…

pnpm--安装与使用

原文网址&#xff1a;pnpm--安装与使用-CSDN博客 简介 本文介绍pnpm的安装与使用。 pnpm由npm/yarn衍生而来&#xff0c;解决了npm/yarn内部潜在的bug&#xff0c;极大的优化了性能&#xff0c;扩展了使用场景&#xff0c;被誉为“最先进的包管理工具”&#xff0c;速度快、…