类的封装、继承和多态

本文详细介绍了Java中封装、继承和多态的概念及应用,包括类的封装定义、getter和setter方法的使用,继承的定义和好处,以及多态的格式和编译运行特点。

@ ## 标题
(子类、父类、抽象类、祖宗类)(封装、继承、多态、getter、setter、构造方法

类的封装

定义

对一个类的属性进行私有化,并提供getter和setter方法。

package class_private;
public class Animal {
    private String name;
    private int 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;
    }
}

好处

  • 安全
  • 规范
    封装后,类中的属性必须通过对象调用getter和setter方法进行操作,我们可以在getter和setter方法中添加一些条件对访问进行限制,起到安全和规范的作用。

JavaBean

  • 属性私有
  • 提供getter和setter方法
  • 必须有空参构造方法,有参构造方法视情况
package class_private;

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

    public Animal() {
    }

    public Animal(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;
    }
}

类的继承

定义

类A通过关键字extends继承类B,则A除了拥有自己的属性和方法外,还具有B中所有的属性和方法(除了B的构造方法不能被继承),使用时不需要通过B,因为继承就表示A也有了,所以能直接使用,但是只能使用B中非私有的(public、protect或者默认),私有private的虽然也会继承过来但是不能直接访问。

public class Dog extends Animal {
    public void call(){
        System.out.println("汪汪汪");
    }
}
public class DemoTest  {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("阿黄");
        dog.setAge(2);
        dog.call();
    }
}

继承的关系

一个类只能有一个父类,但是可以多级继承,比如类的父类再继承别的类;
一个类可以有多个子类

继承的好处

  • 提高代码的复用性
  • 具有现实意义,让代码之间搭建起一定的联系

重写

类A继承类B后,可以对类B中的方法进行重写。
什么是重写: 重写只发生在继承当中,是子类对父类中的方法进行重写,重写要求:

  • 权限修饰符必须>=父类中方法的权限修饰符
  • 返回值类型相同
  • 参数相同(类型、数量)
  • 方法体可以不同
  • 重写方法前必须带上@Override

继承的构造方法

当子类继承了父类后,那么在子类的构造方法中(子类所有的构造方法)会多出一个隐藏的调用父类构造方法的方法super(),我们也可以手动的给出super方法,也可以在里面传递参数来调用对应的父类构造方法,这个super方法可以让子类创建对象的时候先启动父类的构造方法,但是手动给出的super方法必须位于构造方法中的首行,不然会报错,因为子类对象的创建必须先调用父类的构造方法,把父类里面的内容继承过来才能去创建子类的对象。

public class Dog extends Animal {
    public Dog() {
        //隐藏super();
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    public void call(){
        System.out.println("汪汪汪");
    }
}

类的多态

多态的前提是继承,没有继承关系就不能说是多态。

格式

父类类型 对象名 = new 子类类型(参数);

编译和运行

  • 多态调用成员变量的特点:
    编译看左边父类,如果父类没有该属性,那么编译时期会报错;
    运行看左边父类,真正使用的是父类的变量;
    这里的编译指的是在idea编写代码的时候;
  • 多态调用方法的特点:
    编译时看左边父类,如果父类没有该属性,那么编译时候会报错,因为在编写代码的时候并不知道这个对象指的是子类,它仅仅进行语法检查,发现对象是父类类型,就会去父类的方法检查;
  • 解决方案:
    1. 把子类的方法在父类中用抽象方法写,然后子类继承时就必须要重写一次;
    2. 多态转型:向下转型
    2.1 格式:子类类型 变量名 = (子类类型) 父类变量名;
    2.2 使用新的变量名来调用子类的内容,使用父类变量名不可以,但是这里的父类变量名和子类变量名的值表示都是一样的,因为没有新new;

好处:提高代码的灵活性(参数是父类类型,那么可以传递任何的子类对象)

封装继承多态是面向对象编程(OOP)的三大核心特性,它们构成了C++中构建可复用、可扩展可维护代码的基础。 --- ### 一、封装(Encapsulation) **定义:** 封装是指将数据(成员变量操作数据的方法(成员函数)包装在一个中,对外隐藏实现细节,只暴露必要的接口。 **作用:** - 提高代码安全性 - 实现信息隐藏 - 提高模块化程度 **示例代码:** ```cpp class Person { private: std::string name; int age; public: void setName(const std::string& n) { name = n; } void setAge(int a) { if (a > 0) age = a; } std::string getName() const { return name; } int getAge() const { return age; } }; ``` --- ### 二、继承(Inheritance) **定义:** 继承是面向对象编程中实现代码复用的重要机制,一个(派生)可以继承另一个(基)的成员变量成员函数。 **作用:** - 实现代码复用 - 建立之间的层次关系 - 支持多态 **示例代码:** ```cpp class Animal { public: virtual void speak() { std::cout << "Animal speaks" << std::endl; } }; class Dog : public Animal { public: void speak() override { std::cout << "Woof!" << std::endl; } }; ``` --- ### 三、多态(Polymorphism) **定义:** 多态是指同一个接口可以有同的实现方式。C++中通过虚函数实现运行时多态。 **分:** 1. 编译时多态:函数重载、运算符重载 2. 运行时多态:虚函数、继承 **关键点:** - 使用关键字 `virtual` 定义虚函数 - 使用 `override` 明确覆盖虚函数 - 使用基指针或引用调用虚函数时,会根据对象的实际型调用对应的函数 - 若可能被继承,析构函数应设为虚函数(虚析构函数) **示例代码:** ```cpp #include <iostream> using namespace std; class Base { public: virtual void show() { cout << "Base show" << endl; } virtual ~Base() {} // 虚析构函数 }; class Derived : public Base { public: void show() override { cout << "Derived show" << endl; } }; int main() { Base* ptr = new Derived(); ptr->show(); // 输出 "Derived show" delete ptr; return 0; } ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值