《架构风清扬-Java面试系列第5题》说说你对封装、继承、多态的理解

考虑到知识星球的完整性,所以近期钊哥会对【Java核心基础篇】做一些内容的完善

这个小小的星球才刚刚运营了一个月,可以想象下,一年后,它的内容将会相当的丰富

来,这道题,属于基础性题目,如何大家可以结合自己的项目代码来回答会更精彩

下面,钊哥跟大家逐一来复习梳理一下

1,封装(Encapsulation)

概念: 封装是将数据(属性)和对数据的操作(方法)绑定在一起,并且对外隐藏其内部细节的过程。通过封装,对象能够控制外界对其内部状态的访问,只暴露有限的公共接口供外部调用。

应用: 例如,在Java中,我们可以通过创建一个类,并将其属性设置为私有(private),然后提供公共(getter/setter)方法来访问或修改这些属性,以此实现封装:

public class Su7Car {
    private String model; // 私有属性model
    private int year;

    // getter 和 setter 方法
    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
    this.year = year;
    }
}

在这个例子中,Su7Car 类的 model 和 year 属性是封装的,外部只能通过 getModel() 和 setModel()、getYear()、setYear() 这些公共方法与其交互

2,继承(Inheritance)
概念: 继承,允许一个类(称为子类或派生类)从另一个类(称为父类或基类)继承属性和方法。子类不仅拥有父类的所有非私有属性和方法,还可以定义新的属性和方法,或者覆盖(override)父类的方法

应用:

public class Vehicle { // 基类/父类
    protected String brand;
    protected int wheels;

    public void startEngine() {
        System.out.println("Starting the engine...");
    }
}

public class Su7Car extends Vehicle { // 子类/派生类
    private String color;

    public Su7Car(String brand, int wheels, String color) {
        super.brand = brand;
        super.wheels = wheels;
        this.color = color;
    }

    @Override
    public void startEngine() {
        System.out.println("Starting the car engine...");
    }

    public void honk() {
        System.out.println("Honking the horn...");
    }
}

在这个例子中,Su7Car 类通过 extends 关键字继承了 Vehicle 类,因此 Su7Car 类的对象自动具备 Vehicle 类的属性和方法,同时添加了 color 属性和 honk() 方法,并且重写了 startEngine() 方法。

3,多态(Polymorphism)
概念: 多态是指同一个接口(也可以是类)可以被不同子类的对象所实现,从而表现出不同的行为,即一个引用变量可以根据实际赋给它的对象所属的不同类而表现出多种形态。

应用:

public abstract class Animal { // 抽象类充当接口
    public abstract void makeSound();
}

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof!");
    }
}

public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Meow!");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal myPet1 = new Dog(); // 创建Dog对象
        Animal myPet2 = new Cat(); // 创建Cat对象
        
        myPet1.makeSound(); // 输出 "Woof!"
        myPet2.makeSound(); // 输出 "Meow!"

        // 多态示例,Animal类型的引用指向了不同子类的对象
        Animal anotherPet = new Dog();
        anotherPet.makeSound(); // 根据实际对象动态决定输出"Woof!"
    }
}

在这个例子中,Animal 是一个抽象类,Dog 和 Cat 都是它的子类并实现了 makeSound() 方法。在主函数中,尽管 myPet1 和 myPet2 都是 Animal 类型的引用,但它们实际引用的是不同的子类对象,所以表现出不同的行为,这就是多态的典型应用。

感谢各位小伙伴的支持,也希望星球的内容在共同的努力变得越来越丰富,帮助大家提高面试成功率!

也欢迎更多的朋友来加入星球!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值