『百日百题 · 基础篇』备战面试,坚持刷题 第八话——多态与抽象类!

本专栏『百日百题』长期更新,一起加入本刷题计划,一起成长吧!

文章目录

  • JAVA23 定义打印方法【多态】
  • JAVA24 类型判断【多态】
  • JAVA25 实现抽象方法【抽象类】
  • JAVA26 实现接口【抽象类】


JAVA23 定义打印方法【多态】

题目:
『百日百题 · 基础篇』备战面试,坚持刷题 第八话——多态与抽象类!_第1张图片

题解:

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());
        }
    }
    
    public static void print(Object obj){
        System.out.println(obj.getClass().getName()); //调用getName函数直接输出
    }
}

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

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

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

JAVA24 类型判断【多态】

题目:
『百日百题 · 基础篇』备战面试,坚持刷题 第八话——多态与抽象类!_第2张图片

题解:

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) {
		if (obj instanceof Sub1) {
		    Sub1 sub1 = (Sub1) obj;
		    return sub1.getClass().getSimpleName();
		} else if (obj instanceof Sub2) {
		    Sub2 sub2 = (Sub2) obj;
		    return sub2.getClass().getSimpleName();
		} else {
		    return obj.getClass().getSimpleName();
		}
    }
}

class Base {

}

class Sub1 extends Base {

}

class Sub2 extends Base {

}

JAVA25 实现抽象方法【抽象类】

题目:
『百日百题 · 基础篇』备战面试,坚持刷题 第八话——多态与抽象类!_第3张图片
题解:

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 {
    public int sum() {
       return super.getX() + super.getY();
    }
    
    public int avg() {
        return sum() / 2;
    }

}

JAVA26 实现接口【抽象类】

题目:
『百日百题 · 基础篇』备战面试,坚持刷题 第八话——多态与抽象类!_第4张图片
题解:

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 {
    @Override
    public int max(int x,int y){
        return x > y ? x : y;
    }
}

你可能感兴趣的:(百日百题,面试,java,基础语法,算法,语法)