当前位置: 首页 > news >正文

手把手带你刷好题(牛客刷题②)

ced485cbb11e458d81a746890b32cf3f.gif  

作者:月亮嚼成星~

博客主页:月亮嚼成星~的博客主页

专栏:手把手带你刷牛客

工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器——牛客网

点击免费注册和我一起刷题吧

文章目录

定义打印方法 

类型判断 

实现抽象方法

实现接口


定义打印方法 

描述

已知有三个类:First、Second、Third。要求定义一个打印方法,支持传入任意引用类型的参数(包括上述三个类),并在方法内部打印出对象的字符串形式。

输入描述:

类名

输出描述:

由该类实例化出来的对象的字符串表示

题解:

方法:

多态性,是子类的对象赋给了父类的引用,使用的前提是有继承关系、有方法的重写

本题中的三个类都重写了toString()方法

那么很显然,需要找到一个类,是本题中三个类的共同父类,又有toString()方法

并且有forName()方法和newInstance()方法,以便在print()中能传入一个对象

不用想了,平时就是用 Object类,它是所有类的父类,又拥有各种各样的方法

找到该类以后,把这个类的对象作为参数传给print(),也就是“父类的引用”,

并且在方法体中应用上三个子类都重写了的方法来实现需求

这样,在Class.forName(className).newInstance()时,

就会帮助创建出“子类的对象”

从而实现“父类的引用指向子类的对象”,即多态性

import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String className = scanner.next();
            // print就是需要你定义的方法
            print(Class.forName(className).newInstance());
        }
    }

    //write your code here......
    //public static void print(Object obj){
        //System.out.println(obj.getClass().getName());
    //}
     public static void print(Object obj){
        System.out.println(obj.toString());
    }

}

class First {
    public String toString() {
        return "First";
    }
}

class Second {
    public String toString() {
        return "Second";
    }
}

class Third {
    public String toString() {
        return "Third";
    }
}

类型判断 

描述

父类Base有两个子类:Sub1、Sub2,现有一个方法getClassName(),要求传入Base类型的实例,在方法内部判定其具体的类型,返回的是类型的简单名字(不含包名),请补全getClassName()方法的判断逻辑。

输入描述:

输入要实例化的类名:Base、Sub1、Sub2 三者之一。

输出描述:

返回实例的实际类名(简化类名,不包含包的名字)。

 

题解:

方法:这道题要求的是方法中返回实例的具体类型,传入的是一个实例,我们对这个实例调用getClass().getName()即可,直接返回,没什么好说的。 

import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String className = scanner.next();
            Base obj = (Base) Class.forName(className).newInstance();
            System.out.println(getClassName(obj));
        }
    }

    public static String getClassName(Base obj) {

        //write your code here......
         return obj.getClass().getName(); 

    }

}

class Base {

}

class Sub1 extends Base {

}

class Sub2 extends Base {

}

实现抽象方法

描述

已知抽象类Base中定义了calculate方法,该方法的计算过程依赖于sum()和avg(),而后两个方法均为抽象方法。要求定义Base的子类Sub类,并实现父类的抽象方法,使得main函数中的运算逻辑得以正确执行。

输入描述:

两个整数

输出描述:

两个整数的和除以两个整数的平均值(平均值为int类型,不考虑小数问题)

 题解:

考验对方法的重写,然后调用父类的方法去实现题目的需求而已

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // Sub是需要你定义的子类
        Base base = new Sub();

        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            base.setX(x);
            base.setY(y);
            System.out.println(base.calculate());
        }
    }

}
abstract class Base {

    private int x;
    private int y;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int calculate() {
        if (avg() == 0) {
            return 0;
        } else {
            return sum() / avg();
        }
    }

    /**
     * 返回x和y的和
     */
    public abstract int sum();

    /**
     * 返回x和y的平均值
     */
    public abstract int avg();

}

class Sub extends Base {

    
    //write your code here......
    public int sum(){
        
        return super.getX()+super.getY();
        
    }
    public int avg(){
        
        return sum()/2;
        
    }

}

实现接口

描述

已知接口Comparator,内部定义了max函数,用于返回两个整数中的最大值。请定义该接口的实现类,使得main方法中的比较逻辑可以正确执行,要求实现类的名称为ComparatorImpl。

输入描述:

两个整数

输出描述:

两个整数中的最大值

题解:

主要考虑对ComparatorImpl实现类重写max方法,注意:接口是用来被实现(implements)的,实现接口的类称为实现类

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Comparator comparator = new ComparatorImpl();

        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            System.out.println(comparator.max(x, y));
        }
    }

}

interface Comparator {
    /**
     * 返回两个整数中的最大值
     */
    int max(int x, int y);
}
class ComparatorImpl implements Comparator{
    
    public int max(int x,int y){
        return x>y?x:y;
    }
    
}

 “ 本期的分享就到这里了, 记得给博主一个三连哈,你的支持是我创作的最大动力!

相关文章:

  • 【web-攻击用户】(9.7.1)本地隐私攻击:持久性cookie、缓存Web内容、浏览历史记录、Flash本地共享对象……
  • Linux shell 内建命令
  • 计算机网络 --- TCP与UDP协议
  • Redis缓存的连环炮面试题
  • 9月17日 杭州站 | Serverless Developer Meetup 开启报名
  • django+django-haystack+Whoosh(后期切换引擎为Elasticsearch+ik)+Jieba+mysql
  • 【020】基于Springboot+Vue的学生成绩教务管理系统(含教师、学生、管理员身份)含源码、数据库、运行教程
  • 基于KubeEdge的边缘节点分组管理设计与实现
  • Docker(精简版)
  • 猿创征文|Apache ShenYu网关插件介绍
  • 全志V853开发板开发进阶——GPADC
  • 表单(非常非常重要)
  • 【JavaScript】一文了解JS的闭包
  • 2022前端vue面试题
  • docker相关试题
  • 【Amaple教程】5. 插件
  • css选择器
  • Django 博客开发教程 16 - 统计文章阅读量
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • ESLint简单操作
  • Laravel核心解读--Facades
  • SpringCloud集成分布式事务LCN (一)
  • SSH 免密登录
  • ubuntu 下nginx安装 并支持https协议
  • 闭包--闭包之tab栏切换(四)
  • 仿天猫超市收藏抛物线动画工具库
  • 离散点最小(凸)包围边界查找
  • 聊聊hikari连接池的leakDetectionThreshold
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 如何合理的规划jvm性能调优
  • 删除表内多余的重复数据
  • ​Spring Boot 分片上传文件
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (六)Hibernate的二级缓存
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转载)虚函数剖析
  • .htaccess配置常用技巧
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET 指南:抽象化实现的基类
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @Conditional注解详解
  • [ 数据结构 - C++]红黑树RBTree
  • [100天算法】-实现 strStr()(day 52)
  • [Android]Tool-Systrace