java中的封装、继承、多态

封装

java中的第一特性就是封装,以世界中的实体体现到计算机的世界,每个对象都有自己的属性和行为。java中用类来将属性和行为封装到一起,将这个类的实例创建出来以后,这个实例就有这样的属性和行为,并对实例的使用者隐藏数据的实现过程。

1、封装的基本原则

     1)将实例变量标记为私有的(private),表示只能在类的内部使用。

     2)提供公有(public)的get和set方法,用来控制对实例变量的存取动作。

其中,实例变量在初始化的时候(不赋值的情况下)默认是有初始值的,而局部变量(方法内部的变量)是没有初始值的,在没有赋值的情况下使用局部变量则会报错。

2、在对象调用类中的方法时,可能会传参数,这里根据参数的类型分为按值传参和按引用传参两种方式。

    基本数据类型作为参数时,按照值传递的方式。也就是说定义一个基本数据类型的变量并赋值,然后该变量作为参数传递,如果在方法中对该变量值做修改,则该变量在本身定义处的值不会改变。

    引用数据类型作为参数时,如果在方法内部对变量的属性值做了修改,那么该变量的属性值就会随着修改。

 

 继承

java中第二特性就是继承。

1、继承的目的:实现代码的复用、定义出某些类共同的模板。

2、继承的概念:被继承的类叫做父类(基类或者超类),实现继承的类叫做子类。子类拥有父类的所有公有的实例变量和方法,通过关键字extends实现,且类的继承只能是单继承,一个子类只能有一个父类,但是子类可以拥有父类的特性(公有的实例变量和方法),也可以拥有父类的父类的特性(公有的实例变量和方法),这叫做继承的传递性。

3、继承产生的关系:同时子类还可以有自己的实例变量和方法,子类可以重写父类的方法,子类在调用的时候,会先监测自己是否有这个方法,如果有则调用自己的;若自己没有这个方法而直接父类有,则会调用直接父类的;如果直接父类也没有,则会调用间接父类的。如果子类重写了父类的方法,但是子类在调用的时候想要调用直接父类的方法则使用super.方法名()来实现调用直接父类的方法,如果子类想要调用间接父类的方法,则要通过直接父类的super.方法名()来调用。所有的类都继承自Object,如果类定义时没有继承任何类,那么这个类的直接父类就是Object,如果类继承了我们定义的其他类,那么这个类是间接的继承了Object类,所有的类都拥有Object类的方法,如果Object类的方法不满足需求时可以在子类中进行重写,我们经常重写的方法有toString()、equals()方法。

4、重写:子类声明一个和父类相同的方法,包括访问修饰符、返回值、方法名、参数类型、参数个数。

5、继承中的构造方法:在创建子类的对象时,java会默认的通过super();来调用父类的构造方法,创建父类对象,也就是必须按照继承关系由高到低(父→子)进行调用,这部分工作java已经悄悄地替我们做了,然而如果父类的构造方法被重载并且没有定义无参的构造方法,那么子类中的参构造方法(不论是否是有参构造还是无参构造)是不会被编译器通过的,此时要在子类的构造方法中重新调用父类的新的构造方法才可以,并且子类的每个构造方法中只能调用一次父类的构造方法。

 

多态

1、多态存在的条件:

      有继承关系;实现类中方法的重写;父类引用子类对象;

      由以上得知,封装和继承是实现多态的前提条件。

2、多态的定义:同一个方法可以根据发送对象的不同而有不同的行为表现。通过动态绑定实现,在执行的时候判断对象的实际类型,来确定调用相应不同的方法。

3、多态作用:

      3.1 降低类之间的耦合程度:通过方法返回父类或者参数传递父类,即父类指向子类对象的形式减少子类对象在方法中的比例程度,降低耦合。

      3.2 提高可替换性:还是通过父类指向子类来体现。

      3.3 提升可扩展性:在父类的基础上增加子类的个数不受限制,增加的子类不会影响现有的多态结构。

      3.4 通过接口提升通用性:父类通过方法签名,给子类提供接口,子类在父类基础上进行方法重写来达到自己的特殊需求。

      3.5 灵活性:子类的增加、以及接口的提供都提升了程序的灵活性。

多态规则:

在多态的情况下,引用数据类型可以是实际对象类型的父类;

当父类指向子类时,只能调用父类中具有的方法,不能调用子类中特有的方法,但是可以调用子类重写过父类的方法;

当方法的返回类型为父类时,说明方法可以返回父类及其父类下面所有子类对象;

当方法的参数为父类时,说明可以传入父类及其父类下面所有子类对象。

 

<think>嗯,用户想了解Java中的封装继承多态的概念及用法,还要求示例。首先我得回忆这三个核心OOP概念。封装应该和隐藏数据有关,通过访问修饰符来实现,比如private变量,然后提供getter和setter方法。继承的话,是子类继承父类的属性和方法,extends关键字,可能还要提到方法重写。多态的话,应该涉及父类引用指向子类对象,还有方法重载和重写。 然后用户给的引用资料里提到,引用1到5都有相关的内容,可能需要结合这些引用中的内容来组织回答。比如引用4提到继承是分等级层次的类,允许子类继承父类的特征和行为。引用5说多态是向上转型的过程,父类类型变量指向子类实例。这些都需要整合到回答中。 接下来需要结构清晰,分点解释每个概念,给出定义、作用、示例代码。可能每个概念下还要分小点,比如封装的作用包括数据保护和简化使用。继承要注意单继承,还有super关键字的使用。多态分为编译时多态(方法重载)和运行时多态(方法重写)。 示例代码方面,封装的话,可以写一个Person类,私有name和age,提供公共方法访问。继承的例子可以是Student继承Person,添加grade属性。多态可以用Animal类,Dog和Cat继承,重写eat方法,然后用父类引用调用。 还要注意用户提到的引用标识,比如在提到继承的时候引用资料里的内容,比如引用4和3,可能需要标注。但用户给的引用内容有些可能和问题不太直接相关,比如引用1和2比较泛泛,而引用3、4、5更具体,需要合理引用。 最后生成相关问题,可能包括每个概念的优缺点,实际应用中的例子,或者多态与重载重写的关系等。确保问题符合用户需求,帮助进一步学习。 检查有没有遗漏,比如是否每个概念都有示例,是否涵盖了使用场景,是否引用了正确的资料。比如多态部分提到向上转型,引用5里的内容需要标注。确保代码正确,比如Java语法正确,访问修饰符使用正确,没有语法错误。然后组织语言,用中文清晰表达,避免术语混淆。</think>### Java面向对象三大特性解析 #### 一、封装(Encapsulation) **定义**:通过访问控制修饰符隐藏对象内部细节,仅暴露必要接口$^{[^4]}$ **作用**: 1. 防止数据被意外修改(如用`private`保护字段) 2. 简化调用方的使用复杂度 3. 实现数据校验逻辑集中管理 **示例**: ```java public class BankAccount { private double balance; // 私有化字段 public void deposit(double amount) { // 暴露安全操作方法 if(amount > 0) balance += amount; } public double getBalance() { // 提供受控访问 return balance; } } ``` #### 二、继承(Inheritance) **定义**:子类通过`extends`继承父类特征,形成层次化类结构$^{[^3][^4]}$ **特性**: 1. 单继承原则(Java不支持多继承) 2. 支持方法重写(`@Override`) 3. 通过`super`调用父类构造方法 **示例**: ```java class Animal { // 父类 void eat() { System.out.println("动物进食"); } } class Cat extends Animal { // 子类继承 @Override void eat() { System.out.println("猫吃鱼"); // 方法重写 } } ``` #### 三、多态(Polymorphism) **定义**:同一操作作用于不同对象时产生不同行为$^{[^5]}$ **实现方式**: 1. 编译时多态:方法重载(Overload) 2. 运行时多态:向上转型+方法重写 **示例**: ```java Animal a = new Cat(); // 向上转型(多态核心) a.eat(); // 输出"猫吃鱼" // 方法重载示例 class Calculator { int add(int a, int b) { return a+b; } double add(double a, double b) { return a+b; } // 参数类型不同 } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值