6.5---每天一点点--- Java基础之java面向对象的三大特性(总复习+深入版)---详细+举例(小白也能看懂)

本文介绍了Java面向对象编程的三大特性:封装(保护数据并提供公共接口)、继承(代码复用和“is-a”关系)和多态(同行为的多种表现形式)。通过示例展示了如何使用这三大特性来提高代码的灵活性、可维护性和扩展性。
摘要由CSDN通过智能技术生成

Java面向对象的三大特性:封装、继承和多态

1.封装:封装是指将数据和方法包装在一个单元中,并对外部隐藏实现细节。这样做可以保护数据不被意外修改或破坏,并且使得代码更加模块化和易于维护。例如:

public class Person {
    private String name;
    private int age;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public void setAge(int age) {
        if (age < 0 || age > 120) {
            throw new IllegalArgumentException("Invalid age");
        }
        this.age = age;
    }

    public int getAge() {
        return this.age;
    }
}

在上面的例子中,Person类封装了两个私有成员变量name和age,并提供了公共的setter和getter方法来访问它们。这样做可以保护这些数据不被直接访问或修改。

例如,在其他地方调用setName()方法时:

Person person = new Person();
person.setName("Tom");

在这里,“Tom”被设置为person对象的名字。但是,在外部代码中无法直接访问name属性,因为它被声明为private类型。只能通过调用getName()方法来获取name属性值:

String name = person.getName();
System.out.println(name); // 输出 "Tom"

由于name属性已经被封装起来,并且只能通过getter和setter方法进行访问和修改,因此可以有效地保护数据不被意外修改或破坏,并且使得代码更加模块化和易于维护
2.继承:继承是指通过创建一个新类来继承现有类的属性和方法。这样做可以使得代码更加可重用和易于扩展,并且遵循“is-a”关系(即子类是父类的一种类型)。例如:

public class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
}

public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating");
    }

    public void bark() {
        System.out.println("Dog is barking");
    }
}

在上面的例子中,我们定义了一个Animal类和一个Dog类,其中Dog类继承自Animal类。这样做使得Dog对象具有Animal对象所有的属性和方法,并且还添加了自己特有的bark()方法。

3.多态:多态是指同一种行为具有多种表现形式或形态的能力。在Java中,多态主要通过方法重载和方法重写实现。这样做可以使得代码更加灵活、可扩展、易于维护,并且符合“开闭原则”(即对修改关闭,对扩展开放)。例如:

public class Shape {
   public void draw() {}
}

public class Circle extends Shape {
   @Override
   public void draw() {
      System.out.println("Circle is drawing");
   }
}

public class Square extends Shape {
   @Override
   public void draw() {
      System.out.println("Square is drawing");
   }
}

public class Main{
   public static void main(String[] args) {    
      Shape shape1 = new Circle();
      Shape shape2 = new Square();

      shape1.draw(); // 输出 "Circle is drawing"
      shape2.draw(); // 输出 "Square is drawing"
   }
}

在上面的例子中,我们定义了一个Shape基类以及两个派生类Circle和Square。然后,在Main函数中,我们创建了shape1对象并赋值为Circle类型,同时创建了shape2对象并赋值为Square类型。由于它们都是Shape类型的引用变量,因此可以通过相同名称draw()方法来调用它们各自不同版本的draw()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值