面向对象的个人学习理解

首先,封装

开宗明义,概念先行

最最最经典的一句话:

万物皆对象

而面向对象,则是将对象从两个不同的方面去刻画(以小明同学为例):

1.描述事物的属性(静态的特征)

eg.小明的年龄,身高,体重等等

2.事物的行为(动态的特征)

eg.参加考试,吃早饭,跑步,获得奖项等等

然后是:

""代表着许多拥有相同对象的集合

eg.水果类:香蕉,西瓜,葡萄,百香果等等

封装是将类的成员变量或成员方法隐藏起来,通过权限访问修饰符(private,public,protected等)进行限制。总的来说,封装是一种信息隐藏技术。 作用有四:

1.隐藏类的内部实现细节,使外部代码无法直接访问和修改类的内部数据。

2.将类的内部状态和行为进行封装,使得外部代码只能通过类提供的公有接口(也称为类的方法)进行间接访问和操作。

3.提高类的安全性和可维护性,避免由于外部代码直接访问和修改导致的数据安全和稳定性问题。

4.实现代码的重用性,通过将数据和对数据的操作封装在一起,可以防止不同对象之间因数据不一致而产生的冲突。

通过一个属性来感受一下:

public 复制代码
    int age;
}

public static void main(String[] args){

    A a = new A();
    a.age = 500;
}

在这里设置一个A类,有一个年龄属性,但是在主函数里面给年龄设置值的时候,可以胡乱的设置一个值,几百几千的违背常理的设置都不会报错,这个时候就可以使用封装了。

arduino 复制代码
public class A{
    private int age;

    //提供一个返回年龄的方法
    public int getAge(){
        return age;
    }

    //提供一个处理年龄误差的方法
    public void setAge(int age){
        if(age<80){
            age=18;
        }else{
            this.age = age;
        }
    }
}


public static void main(String[] args){

    A a = new A;
    a.getAge(81);
system.uot.println(a.setAge);

上面的代码,对于age属性来说,我加了private。这样外界对它的访问就受到了限制,现在我还想加上其他的限制条件,但是在属性本身上没有办法再加了,所以我们通过定义方法来进行条件的添加。

以属性为案例,进行封装:
1、将属性私有化,被private修饰,加入权限修饰符;

2、提供public修饰的方法让别人来访问使用;

3、即使外界可以通过方法来访问属性了,但是也不能随意访问,因为可以在方法中加入限制条件;

4、设置getter、setter方法,给别人提供访问的路径,idea快捷键:alt+insert键快速生成。

idea中完整空参JavaBean快捷键:

1.alt+instert选择constructor 按两下tab一下回车(取消name.string,选择select none)

  1. alt+ins选择constructor按Ctrl+a(全选)按回车(即确认OK)

3.alt+ins选择getter and setter 按Ctrl+a(全选)按回车

其次,继承

erDiagram Father ||--|{ Son : inherit Son }|..|{ Object : uses

子类继承父类,子类包括多个对象.

继承关键词:extends

1.什么是继承、继承的好处?

继承是面向对象三大特征之一,可以让类跟类之间产生子父的关系。 可以把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码冗余,提高代码的复用性

2.继承的格式? public class 子类 extends 父类{}

3. 继承后子类的特点? 子类可以得到父类的属性和行为,子类可以使用(super调用)。 子类可以在父类的基础上新增其他功能,子类更强大。

关键字 访问成员变量 访问成员方法 访问构造方法
this this.成员变量 this.成员方法(...) this(...)
super super.成员变量 super.成员方法(...) super(...)

this、super使用总结:

this:理解为一个变量,表示当前方法调用者的地址值;

super:代表父类存储空间。

最后,多态

一、多态的定义 多态是面向对象编程中的一个重要概念,它指的是同一个对象在不同情况下具有不同的表现形式和功能。在Java中,多态是指同一个类型的对象,在不同的情况下可以表现出不同的行为。

二、使用多态的前提条件 (使用条件)

1.必须在继承体系下,子类必须继承父类

2.子类必须要对父类中方法进行重写

3.通过父类的引用调用重写的方法 (对于重写不在此处介绍)

使用方法:

父类类型 对象名称 = 子类对象;

代码示例:

class 复制代码
   public void sound() {
      System.out.println("The animal makes a sound");
   }
}

class Cat extends Animal {
   public void sound() {
      System.out.println("The cat meows");
   }
}

class Dog extends Animal {
   public void sound() {
      System.out.println("The dog barks");
   }
}

public class Main {
   public static void main(String[] args) {
      Animal myAnimal = new Animal();
      Animal myCat = new Cat();
      Animal myDog = new Dog();
      
      myAnimal.sound();
      myCat.sound();
      myDog.sound();
   }
}

在这个例子中,Animal是一个父类,而Cat和Dog是它的子类。在main方法中,我们创建了一个Animal对象,一个Cat对象和一个Dog对象。然后,我们通过调用它们的sound方法来展示不同的行为。由于myCat和myDog是Animal类型的引用,但是它们指向的是Cat和Dog对象,因此在调用sound方法时会表现出不同的行为,这就是多态的体现。

其中

调用成员变量 编译看左,运行看左 调用成员方法 编译看左,运行看右

用来判断可不可以强转:(向下转型,即父类转子类) instanceof(是不是)


抽象类与方法

如果在父类中,不知道子类将要进行什么操作,则可以使用抽象类(没有被实现的方法)

抽象方法 public abstract 返回值类型 方法名(参数列表);

抽象类 public abstract class 类名{}

注意:

1.抽象类不能new

2.抽象类不一定有抽象方法,有抽象方法的一定是抽象类

3.可以有构造方法

4.抽象类的子类

要么重写抽象类中的所有抽象方法 要么是抽象类


这周大概就这么多啦~~~

相关推荐
man20171 小时前
【2024最新】基于springboot+vue的闲一品交易平台lw+ppt
vue.js·spring boot·后端
hlsd#1 小时前
关于 SpringBoot 时间处理的总结
java·spring boot·后端
路在脚下@1 小时前
Spring Boot 的核心原理和工作机制
java·spring boot·后端
幸运小圣1 小时前
Vue3 -- 项目配置之stylelint【企业级项目配置保姆级教程3】
开发语言·后端·rust
前端SkyRain2 小时前
后端Node学习项目-用户管理-增删改查
后端·学习·node.js
提笔惊蚂蚁2 小时前
结构化(经典)软件开发方法: 需求分析阶段+设计阶段
后端·学习·需求分析
老猿讲编程3 小时前
Rust编写的贪吃蛇小游戏源代码解读
开发语言·后端·rust
黄小耶@3 小时前
python如何使用Rabbitmq
分布式·后端·python·rabbitmq
宅小海4 小时前
Scala-List列表
开发语言·后端·scala
蔚一5 小时前
Javaweb—Ajax与jQuery请求
前端·javascript·后端·ajax·jquery