【解释下java中的继承、封装、多态?】

概要

在Java中,继承、封装和多态是面向对象编程的三大基本特性。本文是对这三个特性的解释和总结,适用于面试场景。

解释

1. 继承(Inheritance)

定义

继承是面向对象编程中,一个类(称为子类或派生类)可以继承另一个类(称为父类或基类)的成员变量和成员方法(包括私有成员,但私有成员在子类中不能直接访问)的机制。通过继承,子类可以重用父类的代码,并实现代码的重用和扩展。

特点
  • 子类可以拥有父类的属性和方法(除了构造方法和私有方法)。
  • 子类可以重写父类的方法,实现自己的逻辑。
  • Java中只支持单继承,即一个类只能继承一个父类。
  • 可以通过多层继承来实现类的层次结构。
示例
class Animal {  
    void eat() {  
        System.out.println("Animal eats");  
    }  
}  
  
class Dog extends Animal {  
    void bark() {  
        System.out.println("Dog barks");  
    }  
  
    @Override  
    void eat() {  
        System.out.println("Dog eats dog food");  
    }  
}

2. 封装(Encapsulation)

定义

封装是隐藏对象的属性和实现细节,仅对外提供公共访问方式(如方法)的机制。封装将数据(属性)和操作数据的方法(函数)绑定在一起,形成一个不可分割的整体。

特点
  • 通过访问修饰符(如public、private、protected)来控制成员变量的访问权限。
  • 提供公共的方法来访问和修改私有成员变量。
  • 封装提高了代码的安全性和可维护性。
示例
public class Person {  
    private String name;  
    private int age;  
  
    public Person(String name, int age) {  
        this.name = name;  
        this.age = age;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
}

3. 多态(Polymorphism)

定义

多态是指允许不同子类型的对象对同一消息做出不同的响应。简单的说,就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。

特点:
  • 编译时多态性:主要通过方法重载(Overloading)实现,即同一个类中有多个同名但参数列表不同的方法。
  • 运行时多态性:主要通过方法重写(Overriding)和父类引用指向子类对象实现,即父类引用可以指向子类对象,并调用子类重写后的方法。
示例(运行时多态性)
class Shape {  
    void draw() {  
        System.out.println("Shape is being drawn");  
    }  
}  
  
class Circle extends Shape {  
    @Override  
    void draw() {  
        System.out.println("Circle is being drawn");  
    }  
}  
  
class Rectangle extends Shape {  
    @Override  
    void draw() {  
        System.out.println("Rectangle is being drawn");  
    }  
}  
  
public class Main {  
    public static void main(String[] args) {  
        Shape[] shapes = new Shape[2];  
        shapes[0] = new Circle();  
        shapes[1] = new Rectangle();  
  
        for (Shape shape : shapes) {  
            shape.draw(); // 运行时根据对象的实际类型调用相应的方法  
        }  
    }  
}

在上面的示例中,Shape是一个父类,Circle和Rectangle是子类。main方法中创建了一个Shape类型的数组,并分别放入了Circle和Rectangle的对象。当调用draw方法时,会根据对象的实际类型调用相应的方法,这就是多态性的体现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值