Java2EE基础练习及面试题_chapter05面向对象(中_03)


申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址
全文共计5368字,阅读大概需要3分钟
欢迎关注我的个人公众号:不懂开发的程序猿

面试01

/*
面试题:
多态是编译时行为还是运行时行为?
如何证明?
 */
package com.jerry.java;

import java.util.Random;

/**
 * @author jerry_jy
 * @create 2022-09-28 16:48
 */
public class Exer6 {
    /*
    面试题:
    多态是编译时行为还是运行时行为?
    如何证明?
     */
    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();

    }
}

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");
    }


}

面试02

//考查多态的笔试题目:
package com.jerry.java;

/**
 * @author jerry_jy
 * @create 2022-09-28 16:52
 */
public class Exer7 {
    //考查多态的笔试题目:

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

//		Sub1 s = (Sub1)base;
//		s.add(1,2,3);
    }
}
class Base1 {
    public void add(int a, int... arr) {
        System.out.println("base");
    }
}

class Sub1 extends Base1 {

    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");
//	}

}

面试03

    /*
    面试题:==和equals的区别

1 == 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型 就是比较内存地址

2 equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也 是==;我们可以看到String等类的equals方法是被重写过的,而且String类在日常开发中 用的比较多,久而久之,形成了equals是比较值的错误观点。

3 具体要看自定义类里有没有重写Object的equals方法来判断。

4 通常情况下,重写equals方法,会比较类中的相应属性是否都相等。
     */

面试04

    int it = 65;
    float fl = 65.0f;
    System.out.println(6565.0f是否相等?” + (it == fl)); //true
    char ch1 = 'A'; char ch2 = 12;
    System.out.println("65和'A'是否相等?" + (it == ch1));//true
    System.out.println(12和ch2是否相等?" + (12 == ch2));//true
    String str1 = new String("hello");
    String str2 = new String("hello");
    System.out.println("str1和str2是否相等?"+ (str1 == str2));//false
    System.out.println("str1是否equals str2?"+(str1.equals(str2)));//true
    System.out.println(“hello” == new java.util.Date()); //编译不通过

面试05

    //面试题
        char[] arr = new char[]{'a', 'b', 'c'};
        System.out.println(arr);//abc
        int[] arr1 = new int[]{1, 2, 3};
        System.out.println(arr1);//[I@1b6d3586
        double[] arr2 = new double[]{1.1, 2.2, 3.3};
        System.out.println(arr2);//[D@4554617c

面试06

    /*
    【面试题】
    如下两个题目输出结果相同吗?各是什么:
     */
        Object o1 = true ? new Integer(1) : new Double(2.0);
        System.out.println(o1);//1.0

        System.out.println("===============");
        Object o2;
        if (true)
            o2 = new Integer(1);
        else
            o2 = new Double(2.0);
        System.out.println(o2);//1

面试07

/*
继承性
java类是否可以多继承,怎么实现多继承?
答:java没有多继承,但可以通过接口的形式来达到多继承的目地。
 */

面试08

定义类A 和类B 如下:

 (1) 若在应用程序的main 方法中有以下语句:
A a=new A();
a.show();//Class A: a=1	d=2.0
则输出的结果如何?
(2) 若在应用程序的main 方法中定义类B 的对象b:
A b=new B();
b.show();
则输出的结果如何?
Class A: a=1	d=2.0
Class B: a=3.0	d=Java program.

面试09

写出重载与重写的区别。

重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?
答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。

面试10

Overload的方法是否可以改变返回值的类型?
可以

面试11

//写出错误答案错误的原因
class Demo{
int show(int a,int b){return 0;}
}
下面那些函数可以存在于Demo的子类中。
A.public int show(int a,int b){return 0;}//可以,覆盖。
B.private int show(int a,int b){return 0;}//不可以,权限不够。
C.private int show(int a,long b){return 0;}//可以,和父类不是一个函数。没有覆盖,相当于重载。
D.public short show(int a,int b){return 0;}//不可以,因为该函数不可以和给定函数出现在同一类中,或者子父类中。
E.static int show(int a,int b){return 0;}//不可以,静态只能覆盖静态。

面试12

//写出错误答案错误的原因
class Demo{
int show(int a,int b){return 0;}
}
下面那些函数可以存在于Demo的子类中。
A.public int show(int a,int b){return 0;}//可以,覆盖。
B.private int show(int a,int b){return 0;}//不可以,权限不够。
C.private int show(int a,long b){return 0;}//可以,和父类不是一个函数。没有覆盖,相当于重载。
D.public short show(int a,int b){return 0;}//不可以,因为该函数不可以和给定函数出现在同一类中,或者子父类中。
E.static int show(int a,int b){return 0;}//不可以,静态只能覆盖静态。

面试13

//写出程序结果
class Super {
	public int get() {
		return 4;
	}
}

class Demo15 extends Super {
	public long get() {
		return 5;
	}

	public static void main(String[] args) {
		Super s = new Demo15();
		System.out.println(s.get());
	}
}

编译失败,因为子类父类中的get方法没有覆盖。但是子类调用时候不能明确返回的值是什么类型。
所以这样的函数不可以存在子父类中。

面试14

Object类的使用说明

我比较两个String总是false,但是它们明明都是"abc" !
答:比较String一定要使用equals或equalsIgnoreCase方法,不要使用 ==
因为==比较的是两个引用(变量)是否指向了同一个对象,而不是比较其内容。

面试15

为什么要重写toString()方法?
为什么要重写equals()方法?

当自定义使用equals()时,可以重写。用于比较两个对象的“内容”是否都相等

面试16

写出“==”和equals的区别

面试17

类似:两个对象a和b,请问a==b和a.equals(b)有什么区别?

面试18

以下代码如何优化
if(username.equals(“admin”){
  ....
}
答案:
if(“admin”.equals(username)){
}

面试19

包装类的使用
写出8中基本数据类型的包装类
    Byte    Short   Integer     Long    Float   Double  Boolean     Character

面试20

int 和 Integer 有什么区别

答:Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。
int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型封装类型及其对应的包装类:boolean Boolean,char Character,byte Byte,short Short,int Integer,long Long,float Float,doubl Double
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。

面试21

以下代码的运行结果是:
    public static void main(String[] args) {
        Integer i1 = 128;
        Integer i2 = 128;
        int i3 = 128;
        int i4 = 128;
        System.out.println(i1 == i2);//false
        System.out.println(i3 == i4);//true
        System.out.println(i1 == i3);true
    }
Integer的i1和i2是对象,他们==比较的是地址。如果-128~127范围,那么使用缓存的常量对象,如果超过这个范围,是新new的对象,不是常量对象

面试22

以下代码的运行结果是:
public static void main(String[] args) {
    double a = 2.0;
    double b = 2.0;
    Double c = 2.0;
    Double d = 2.0;
    System.out.println(a == b);//tue
    System.out.println(c == d);//false,比较的Double包装类的地址值
    System.out.println(a == d);//true,因为==是比较的值
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不懂开发的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值