面向对象三大特征

本文详细介绍了Java中的面向对象编程三大特性:封装、继承和多态。封装通过限制属性访问,使用getter和setter方法确保代码安全。继承允许子类继承父类的特性,实现代码复用。多态则提供了灵活的类型转换和方法调用,增强了程序的扩展性和可维护性。通过对这三个概念的理解和应用,可以更好地设计和组织Java代码。
摘要由CSDN通过智能技术生成

我的博客icon-default.png?t=M276https://blog.ideaopen.cn/

封装

何为封装

将抽象性函式接口的实现细节部分包装、隐藏起来的方法

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性

如何封装

首先,我们需要修改属性的可见性来限制对属性的访问,一般用private关键词进行限制。

像这样我就封装了两个字段,封装之后我们不能在其他类中自由调用,因为它不是公开的属性!

但是我们如何让他可以修改,并且还保持安全性呢?

我们可以对他进行重构,封装成方法,在IDEA中,提供了快捷的右键,可以快速生成。

执行一键封装后效果如下。

public class Demo {
​
    private String i;
    private int x;
    public static void main(String[] args) {
​
    }
​
    public String getI() {
        return i;
    }
​
    public void setI(String i) {
        this.i = i;
    }
​
    public int getX() {
        return x;
    }
​
    public void setX(int x) {
        this.x = x;
    }
}
​

大家可能注意到了,封装的方法是public修饰的,所以public方法是外部类访问该类成员变量的入口,这些方法被称为getter和setter方法。

继承

何为继承

第二大特征——继承!

何为继承?字面上理解,子承父业,即为继承。

那其实Java也是一样,一个(多个)类继承另一个类的特征,我们称之为继承。

如何继承

我们上面就说过,继承要子承父业,那如何定义父亲与儿子呢?

我们的extends关键词可为类指定它的父亲。

在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。

/**
 * 父类
 */
public class Demo {
    
}
​
/**
 * 子类
 */
class son extends Demo{
​
}

这段代码是单继承,只有一个子一个父,而我们的Java是没有多继承的,但是有个关键词可以变相的定义多继承——implements

这里就不细说了。

继承到底有什么用呢?

看这里,son类是子类,它里面并没有输出语句,但是他却输出了父类里面的语句。

相当于它继承了父亲的财产。而假设我们将多个类的共同的放在父类里面,我们是不是可以节省很多代码呢?

那么问题来了,我如果想让父类中的一个属性或者方法啥的不被继承怎么办?

我们可以使用final来定义不想被继承的方法或者属性,如下代码块一样。

/**
 * @author woo-m
 */
​
/**
 * 父类
 */
public class Demo {
    final static void main(String[] args) {
        System.out.println("父类");
    }
}
​
/**
 * 子类
 */
class son extends Demo{
​
}

同名情况下,如何选择父类与子类

/**
 * 定义动物类
 */
class Animal {
    void show() {
        System.out.println("动物");
    }
}
​
/**
 * 狗类定义动物类为父类
 */
class Dog extends Animal {
    @Override
    void show() {
        System.out.println("狗");
    }
    void showTest() {
        this.show();   // this 调用自己的方法
​
        super.show();  // super 调用父类方法
    }
}
​
/**
 * @author woo-m
 */
​
public class Demo {
    public static void main(String[] args) {
        Animal a = new Animal();
        a.show();
​
        Dog d = new Dog();
        d.showTest();
    }
}

这里,你可以看到,我这里使用this来指向自己类中定义的show方法,而super可以指向父类的show方法。

这里就不多讲,自己理解!

多态

何为多态

欲解其用,必知其理。

我们先来看看,啥是多态!

  • 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。

  • Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。

也就是说,你有许许多多的特点,你的特点可以分为多个类,你可以是人,可以是学生,同时你也是程序员。

多态体现为父类引用变量可以指向子类对象,不过,前提条件:必须有子父类关系。

多态优势

  • 消除类型之间的耦合关系

  • 可替换性

  • 可扩充性

  • 接口性

  • 灵活性

  • 简化性

多态存在的三个必要条件

  • 继承

  • 重写

  • 父类引用指向子类对象:Parent p = new Child();

使用多态

多态这里难以文字描述,需要自己悟出来,我就不写了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小简(JanYork)

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值