(2)Java基础

1.接口和抽象的区别

抽象类可以有构造方法 接口不行
抽象类可以有普通成员变量 接口没有
抽象类可以有非抽象的方法 接口必须全部抽象
抽象类的访问类型都可以 接口只能是 public abstract
一个类可以实现多个接口 但只能继承一个抽象类

2.Super面试题

题一

import java.util.Date;

public class Test extends Date{

    public static void main(String[] args) {
       new Test().test();
    }

    public void test(){
       System.out.println(super.getClass().getName());
    }
}

返回的结果是 Test
因为super.getClass().getName() 调用了父类的 getClass() 方法, 返回当前类
如果想得到父类的名称,应该用如下代码:

getClass().getSuperClass().getName()

题二

public abstract class Car {

    String name = "Car";

    public String getName(){
        return name;
    }

    public abstract void demarre();
}

public class B extends Car{
    String name = "B";

    public String getName(){
        return name;
    }

    public void demarre() {
        System.out.println(getName() + " demarre");
    }
}

public class C extends B{
    String name = "C";

    public String getName(){
        return name;
    }

    public void demarreWithSuper() {
        System.out.println(super.getName() + " demarre");
    }

    public void demarreNoSuper() {
        System.out.println(getName() + " demarre");
    }
}

public class D extends B{
    public String getName(){
        return name;
    }

    public void demarreNoSuper() {
        System.out.println(getName() + " demarre");
    }
}

public class Test {
    public static void main(String[] args) {
        B b = new B();
        b.demarre();

        Car bCar = new B();
        bCar.demarre();

        C c = new C();
        c.demarre(); // c 里并没有定义这个函数
        c.demarreWithSuper();
        c.demarreNoSuper();

        D d = new D();
        d.demarre();

        transfer(c);    // TransferC
        transfer((B)c); // TransferB
        transfer(d);    // TransferB
    }

        public static void transfer(B b){
            System.out.println("TransferB");
            b.demarre();
        }

        public static void transfer(C c){
            System.out.println("TransferC");
            c.demarre();
        }
    }
}

输出是 B demarre B demarre C demarre B demarre C demarre B demarre TransferC C demarre TransferB C demarre TransferB B demarre

3.Static 关键字

Static 关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例的情况下直接被访问。

声明为 static 的方法有以下几条限制

  1. 仅能调用其他的 static 方法。
  2. 只能访问 static 变量。
  3. 不能以任何方式引用 this 或 super。
  4. 不能被覆盖。

是否可以 override 一个 static 的方法?
不能被覆盖. 因为方法覆盖是基于运行时动态绑定的, 而 static 方法是编译时静态绑定的。

4.equals() 与 hashcode()

equals
默认的方法是
public boolean equals(Object obj) {
    return (this == obj);
}

默认情况下比较的还是对象的地址. 所以如果把对象放入Set中等操作,就需要重写eqaul方法了,重写之后的 equals() 比较的就是对象的内容了。

5.== 和 equal 的区别

暂时未写,需整理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值