面向对象编程

面向对象编程的主要目标是通过对象和类来组织代码,使得程序更加模块化和可维护。

2. 面向对象编程

2.1 类与对象

是对象的蓝图或模板。类定义了对象的属性和行为。对象是类的实例,通过类创建,并可以使用类定义的方法和属性。

创建类和对象的基本示例

public class Dog {
    // 属性(字段)
    String name;
    int age;

    // 方法
    void bark() {
        System.out.println("Woof! Woof!");
    }

    void displayInfo() {
        System.out.println("Name: " + name + ", Age: " + age);
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建对象
        Dog myDog = new Dog();
        // 设置属性
        myDog.name = "Buddy";
        myDog.age = 3;
        // 调用方法
        myDog.bark();
        myDog.displayInfo();
    }
}

在这个示例中,Dog 是一个类,具有 nameage 这两个属性,以及 barkdisplayInfo 这两个方法。Main 类中的 main 方法创建了一个 Dog 对象,并对其属性进行了赋值,调用了其方法。

2.2 继承

继承允许我们创建一个新的类,该类基于现有类,并且可以复用、扩展或修改现有类的功能。被继承的类称为父类(或基类),继承的类称为子类(或派生类)。

继承的基本示例

// 父类
public class Animal {
    void eat() {
        System.out.println("This animal eats food.");
    }
}

// 子类
public class Cat extends Animal {
    void meow() {
        System.out.println("Meow! Meow!");
    }
}

public class Main {
    public static void main(String[] args) {
        Cat myCat = new Cat();
        myCat.eat(); // 从父类继承的方法
        myCat.meow(); // 子类自己的方法
    }
}

在这个示例中,Animal 类是父类,Cat 类是子类。Cat 类继承了 Animal 类的 eat 方法,并添加了自己的 meow 方法。

2.3 多态

多态是指同一个方法或操作在不同的对象中具有不同的表现。主要有两种形式:方法重载方法重写

  • 方法重载(Overloading):同一个类中,方法名称相同但参数不同。

    方法重载示例

    public class Display {
        void show(int num) {
            System.out.println("Number: " + num);
        }
    
        void show(String message) {
            System.out.println("Message: " + message);
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Display display = new Display();
            display.show(10); // 调用 show(int)
            display.show("Hello"); // 调用 show(String)
        }
    }
    
  • 方法重写(Overriding):子类中定义一个与父类中方法相同的方法,用于修改或扩展父类的行为。

    方法重写示例

    // 父类
    public class Animal {
        void sound() {
            System.out.println("Some sound...");
        }
    }
    
    // 子类
    public class Dog extends Animal {
        @Override
        void sound() {
            System.out.println("Woof! Woof!");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Animal myDog = new Dog();
            myDog.sound(); // 调用 Dog 类中的 sound 方法
        }
    }
    
2.4 封装

封装是将数据(属性)和操作数据的方法(行为)封装在一个类中,并隐藏实现细节。封装的好处是可以控制数据访问,保护数据不被随意修改。

封装的基本示例

public class Person {
    // 私有属性
    private String name;
    private int age;

    // 公共的 getter 和 setter 方法
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age > 0) {
            this.age = age;
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("John");
        person.setAge(30);
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
    }
}

在这个示例中,Person 类的 nameage 属性是私有的,通过公共的 gettersetter 方法进行访问和修改。setAge 方法还包含了数据验证逻辑,确保年龄是正数。

2.5 抽象与接口
  • 抽象类:抽象类是不能实例化的类,主要用于被其他类继承。它可以包含抽象方法(没有实现的方法)和具体方法(有实现的方法)。

    抽象类示例

    abstract class Animal {
        abstract void makeSound(); // 抽象方法
    
        void sleep() { // 具体方法
            System.out.println("This animal sleeps.");
        }
    }
    
    public class Dog extends Animal {
        @Override
        void makeSound() {
            System.out.println("Woof! Woof!");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Animal myDog = new Dog();
            myDog.makeSound(); // 调用 Dog 类中的 makeSound 方法
            myDog.sleep(); // 调用 Animal 类中的 sleep 方法
        }
    }
    
  • 接口:接口是一种特殊的抽象类,包含抽象方法的集合。类通过实现接口来承诺实现接口中的所有方法。

    接口示例

    interface Animal {
        void makeSound();
    }
    
    class Cat implements Animal {
        @Override
        public void makeSound() {
            System.out.println("Meow! Meow!");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Animal myCat = new Cat();
            myCat.makeSound(); // 调用 Cat 类中的 makeSound 方法
        }
    }
    

    接口与抽象类的区别

    • 接口不能包含具体的方法实现,而抽象类可以。
    • 一个类可以实现多个接口,但只能继承一个抽象类。

以上就是面向对象编程的基本概念和示例。在 Java 编程中,掌握这些面向对象的原则对于编写清晰、可维护和可扩展的代码非常重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跳房子的前端

你的打赏能让我更有力地创造

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值