java基础面试题整理1-面向对象

Posted 萝卜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础面试题整理1-面向对象相关的知识,希望对你有一定的参考价值。

1.什么是面向对象?

面向对象概念:(面向对象是一种编程思想,相比于面向过程,我们由原来的问题过程的执行者变成指挥者,从而把生活中的很多复杂问题变得简单化).面向对象是必须有一个具体的事物,这个事物可以是一个具体的人或者具体的物,这个事物有自己的特征(属性),有自己的行为(方法).那么对这个具体事物特征的描述,和对行为的操作称为面向对象的.

2.面向对象的特点

1).封装

封装是隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式,比如类和方法
好处:提高安全性,提高重用性

2).继承

继承是面向对象最显著的一个特征,继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并扩展新的能力.Java继承是会用已存在的类的定义作为基础建立新类的技术
新类的定义可以增加新的数据或者新的功能,也可以使用父类的功能,但不能选择性的继承父类(超类/基类),这种继承使得复用以前的代码非常容易,能够大大的缩短开发的周期,降低开发费用.

3).多态

多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。可以把不同的子类对象都当作父类来看,进而屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,统一调用标准。

3.overload和override的区别.

1).overload:重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载.
(1).重载Overload是一个类中多态性的一种表现
(2).重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)
(3).重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准

public void eat(){
    System.out.println("eat");
}
public void eat(String food){
    System.out.println("eat"+food);
}

2).override:子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。(#两同两小一大)
(1).发生在父类与子类之间
(2).方法名,参数列表必须相同
(3).访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
(4).重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
(5).返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5及更早版本返回类型要一样,java7及更高版本可以不同)。

public class Father {
    public static void main(String[] args) {
        Son s = new Son();
        s.sayHello();
    }
    public void sayHello() {
        System.out.println("Hello");
    }
}
class Son extends Father{
    @Override
    public void sayHello() {
        System.out.println("Hello XiaoHu");
    }
}

4.各代码块优先级(代码)

public class Demo{
    Demo(){
        System.out.println("我是构造方法!");
    }
    {
        System.out.println("我是构造代码块!");//实例化对象的时候才会去调用!
    }
    static{
        System.out.println("我是静态代码块!");
    }
    
    public static void main(String[] args) {
        new Demo();
        new Demo();//再次创建对象,证明无论创建几次对象,静态代码块都只执行一次
        System.out.println("我是普通代码块!");
    }
}

输出:
我是静态代码块!
我是构造代码块!
我是构造方法!
我是构造代码块!
我是构造方法!
我是普通代码块

5.抽象类和接口的区别

抽象类:
模板模式应用的简单规则:
1).抽象父类可以只定义需要使用的某些方法,其余留给子类去实现;
2).父类提供的方法只是定义了一个通用算法,其实现必须依赖子类的辅助;
总结:如果父类的方法不想被子类覆写,那么可以在前面加上final关键字修饰。

接口:
1)、接口只定义了类应当遵循的规范,却不关心这些类的内部数据和其方法内的实现细节.
2)、接口只规定了这些类里必须提供的方法;从而分离了规范和实现.增强了系统的可拓展性和维护性;
3)、接口没有构造方法,不能实例化!
4)、接口里的方法全部是抽象的,没有普通方法,有默认的修饰符 public abstract,必须全部覆写!

以上是关于java基础面试题整理1-面向对象的主要内容,如果未能解决你的问题,请参考以下文章

Java面试题整理《基础篇》

java面试题整理

2023-JavaSE最新整理面试题

关于java基础面试题(小编自行整理)

每周 10 道 Java 面试题 : 面向对象, 类加载器, JDBC, Spring 基础概念

java面试题及答案整理(基础篇),持续更新中。。。