您的位置 首页 java

大厂面试系列-详解Java面向对象的三大基本特征

面向对象的核心思想就是一切皆对象,是对现实存在的事务进行一个抽象化的过程。在这个过程中我们需要了解如何将现实事物抽象成程序代码,而整个的过程离不开面向对象三大特性继承、封装、多态的支持。下面我们就来看一下在面试中我们应该如何回答三大特性相关的问题。

封装

所谓的封装,就是将客观存在的事物进行抽象的过程。并且生成的对象中属性代表事物的属性,而封装的方法就代表了事物的行为。整个封装的过程就是将一些不可以展示的属性或者方法进行隐藏的过程。

简单来讲,就是如果一个类封装了一些属性和方法,那么就代表整个被封装的类对象某些方法是私有的只有自己可以看到,不可以被外界访问,除非自身提供了访问的方法。这样的操作可以保护对象的一些私有属性不会遭到破坏,防止程序中一些无关的代码对相应属性进行修改。

下面我们来封装一个矩形的对象类,并且定义了长和宽两个属性,并且还提供了计算矩形面积的方法

 public class  Rectangle  {
     public Rectangle(int length, int width) {
         this.length = length;
         this.width = width;
     }
      private  int length;
     private int width;
     public int area() {
         return this.length * this.width;
     }
}
  

通过上面的封装操作,我们可以创建出一个与现实世界完全一致的矩形的抽象对象,并且可以调用计算面积的方式来获取到抽象矩形的面积。

继承

关于继承,它所展示出来的就是 Java 的一种类扩展能力,我们可以在不改变原有抽象对象的基础上,对 抽象类 进行属性扩展和方法扩展的操作,就可以被称为是类继承操作。

通过继承操作可以创建子类、孙子类等等。而被继承的类对象就被称为是父类或者是超类。例如,我们可以创建一个Pet的宠物类。

 public class Pet {
    private String name;
    private String age;
    public void eat(){
        System.out.println("吃东西");
    }
}  

通过继承这个宠物类我们可以创建一个Dog狗宠物类型,还可以创建一个Cat猫宠物,并且狗和猫,两种宠物都有名字和年龄,并且都有吃东西这个动作。代码如下。

 public class Dog extends Pet {
    private String type;
    
    public void lookDoor(){
        System.out.println("看门");
    }
}

public class Cat extends Pet {
    private String color;
    
    public void sleep(){
        System.out.println("睡觉");
    }
}
  

这里的猫、狗宠物在现实生活中都可以被归类为宠物,在代码抽象中,我们先抽象出来了宠物类,通过宠物类来派生出来了猫宠物和狗宠物,当然还有其他的宠物类型。我们都可以继承宠物类来实现一些基础属性。如上面代码中展示的一样,这种关系就可以通过继承来实现

多态

Java中的 多态 是指一个类的实例对象的相同方法在不同形式下有不同的表现。多态机制是对同一接口对象在不同内部结构下不同状态显示的同样的调用。

也就是说,虽然针对的是不同的对象,但是通过一个公共的类,这些不同的类也可以通过同样的方法进行调用。

在Java中最常见的多态方式就是将子类传入到父类参数中,调用父类对象的方法通过传入的子类对象来判断具体的行为是什么。

一般我们可以将多态分为如下的几类

  • 特定多态:继承了同一个接口的不同类实现
  • 参数多态:通过参数传入的方式来判断不同类实现
  • 子类型结构:通过同一个类继承来实现不同类操作的结构

通过下面的代码来简单的理解一下多态。

 public class Parent{
    
    public void call(){
       System.out.println("父类")
    }
}

public class Son extends Parent{// 1.有类继承或者接口实现
    public void call(){// 2.子类要重写父类的方法
        System.out.println("子类")
    }
}

public class Daughter extends Parent{// 1.有类继承或者接口实现
    public void call(){// 2.子类要重写父类的方法
        System.out.println("女类")
    }
}

public class Test{
    
    public  static  void main(String[] args){
        Parent p = new Son(); //3.父类的引用指向子类的对象
        Parent p1 = new Daughter(); //3.父类的引用指向子类的对象
    }
}
  

这样就实现了一个简单的多态,因为同样继承的是Parent类型,但是Son和Daughter分别对call()方法进行了不同的实现。在使用的时候就可以根据具体的情况而定。

例如在我们 Spring 框架中最为经典的多态实现就是IOC容器操作,翻译成中文就是控制反转,它所提倡的思想就是将设计好的对象交给了容器来进行控制,而不是传统的我们通过new的方式来进行控制。这个时候,因为我们在使用之前不知道需要用到什么样的业务对象,所以在容器进行控制的时候我们提供的是一个接口类,这个接口类中实现了各种需要调用的方法。只有在实际操作的时候根据具体的实现来进行不同的封装,最终实现业务逻辑的调用。

总结

上面我们介绍了面向对象的三大基本特征,也正是有了这三大基本特征,让我们的面向对象的编程变的更加高效。一般在面试中被提及最多的就是多态的实现,而对于多态的理解,在上面我们也给出了相应的介绍。在后续的分享中我们也会进一步的为大家带来更多干货的内容,希望大家可以多多关注。

文章来源:智云一二三科技

文章标题:大厂面试系列-详解Java面向对象的三大基本特征

文章地址:https://www.zhihuclub.com/168822.shtml

关于作者: 智云科技

热门文章

网站地图