JAVA面试-语法基础- A01

语法基础

  • 面向对象
    • 封装
    • 继承
    • 多态

面向对象

面向对象特性

封装

利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分隔的独立实体,数据被保护在抽象数据类型的内部,尽可能的隐藏内部的细节,只保留一些对外的接口,用户无需对对象的内部了解过多,但是可以通过对象提供的接口来访问对象。

优点 \color{#FF00FF}{优点} 优点

  • 减少耦合:独立开发,测试,优化,理解和修改
  • 减轻维护的负担:可以更加容易被程序员理解,并且在调试的时候可以不影响其他的模块
  • 提高软件的重用性
  • 降低来构建大型系统的风险:即使整个系统不可用,但是其他的模块是可以使用的

下面People类封装nameagesex等属性,外界只能通过get()方法获取其相关对象的属性,但是相应的其中wealth属性是无法获取的,但是这个属性是可以通过owner来获取的

package com.Jragon.Base.object;

/**
 * Created by jdx on 2023/5/18 下午12:05
 */
public class People {
    private String name;
    private int wealth;
    private int age;
    private int sex;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getSex() {
        return sex == 0 ? "man" : "woman";
    }

    public void owner() {
        if (18 <= wealth && wealth <= 28) {
            System.out.println("You who have youth are the richest!!!");
        } else {
            System.out.println("Don't waste your time in vain!!!");
        }
    }
}

继承

继承体现了 IS-A 的关系,例如 DogAnimal就是一种 IS-A 的关系,因此Cat可以继承 Animal,从而获得 Animal 的对应属性。注意:继承应该遵循里式替换原则,子类对象必须能够替换掉所有的父类对象。

对于父类引用子类对象称为向上转型的深入理解

Dog 可以当做 Animal 来使用,也就是说可以使用 Animal 引用 Dog 对象。父类引用指向子类对象称为 向上转型 。

Animal animal = new Dog();

多态

多态运行时有三个条件:

  • 继承
  • 重写
  • 向上转型

计算类

  1. 4*0.1 == 0.4 将会返回true or false
  • false,因为有一些浮点数并不能精确的反馈出来
  1. a=a+b和a+=b的区别
  • +=隐式的将操作结果先进行类型准换,然后在对结果进行计算,这是区别于a=a+b的根本

基本面试相关问题

1、对equals()和hashCode()的理解

  • 在重写equals方法的时候需要重写hashCode()方法,原因就是有强制规范,在此过程中需要注意不同的对象可能会有相同的hashCode但是相同的对象就一定不会有相同的HashCode 这是强制规范所定

2、String、StringBuffer和StringBuilder的区别

  • 从适用范围角度来看,String对象是不可变的,但是StringBuffer和StringBuilder是可变字符串操作,对于String来说,他是final修饰的、每次对对象的操作都会生成一个新的对象,但是对于另外俩个来说他们本身是对对象进行操作,所以在对字符进行频繁操作的时候可以考虑抛弃String防止对系统性能进行产生影响
  • 从线程安全角度来说:StringBuilder回更快但是这就意味着他的安全性能比较低,因为从线程安全角度来看确实如此

3、this()&super()在构造方法中的区别

  • 本质来说this是指向对象的指针(假想),super就是一个关键字
  • 调用super方法来说,必须将super放在第一行否则idea将会飙红,象征编译不通过
  • this和super不能在同一个构造器中
  • 适用以上this和super方法时,不可用在static环境中

4、接口和抽象类的区别

  • 抽象类中可以有构造方法,接口没有构造方法(java8以后接口也是可以有构造方法的【default 关键字】)
  • 抽象类中可以有普通成员变量,接口没有普通成员变量
  • 一个子类可以智能继承一个抽象类,但是可以实现多个接口

你可能感兴趣的:(java,面试)