首页 > 其他分享 >面向对象(OOP)

面向对象(OOP)

时间:2023-12-12 22:59:05浏览次数:30  
标签:name 构造方法 面向对象 OOP Student 父类 super public

面向对象(OOP)

什么是面向对象

面向对象的思想

  • 物以类聚,分类的思维模式,思考问题首先思考解决问题需要哪些分类,然后对各类分别思考。

  • 面向对象适合处理复杂的问题,适合处理需要多人协作的问题。

面向对象编程的本质以类的方式组织代码,以对象的组织(封装)数据

三大特性

  • 封装

  • 继承

  • 多态

类和对象的关系

  • 类是一种抽象的模版。

  • 对象是类中的一个实例化后的具体实例。

例:类:人 对象:乔峰大侠

构造器

注意:

  1. 使用new关键字时,本质是在调用构造器。

  2. 有参构造:一旦定义了一个有参构造,无参构造就必须显示定义。

  3. alt + insert 快速生成构造器。

package com.paial.demo01;

public class Student {
   String name;

   //无参构造方法
   //如果没有定义构造方法,系统会自动提供一个无参构造方法
   //如果定义了构造方法,系统不会自动提供无参构造方法,需要自行定义
   public Student() {
  }
   
   //有参构造方法
   public Student(String name) {
       this.name = name;
  }
   
   //没有返回类型,也不能写void
}

封装

属性私有,get/set

追求:高内聚,低耦合

private:私有。

get/set:提供一些可以操作这个属性的方法。

package com.paial.Dame02;

/*
1.提高程序的安全性
2.隐藏代码的实现细节
3.统一接口
4.系统可维护性增强  
*/

public class Student {
   
   private String name;
   
   private int age;
   
   //get:获得对象的属性
   public String getName(){
       return name;
  }
   
   //set:设置对象的属性
   public void setName(String name){
       this.name = name;
  }
   //alt + insert 快捷键
}

继承

本质:对某一批类的抽象

关键字:extends

相当于父子关系

子类继承了父类就会拥有父类的全部方法(私有的无法被继承)。

ctrl + h:看类之间的关系

注意:一个子类只能有一个父类(一个儿子只有一个父亲,一个父亲可以有多个儿子)

super注意点

  1. super调用父类的构造方法,必须在构造方法的第一个

  2. super必须只能出现在子类的方法或者构造方法中

  3. super和this不能同时调用构造方法!

与this对比

  1. 代表的对象不同

    • this:本身调用者的这个对象

    • super:代表父类对象的使用

  2. 前提:

    • this:没有继承可以使用

    • super:只有继承父类后才能使用

  3. 构造方法

    • this():本类的构造

    • super():父类的构造

方法的重写

需要有继承关系,子类重写父类的方法!

  1. 方法名必须相同

  2. 参数列表必须相同

  3. 修饰符:范围可以扩大但不能缩小:public>protected>default>private

  4. 抛出的异常:范围可以缩小但不能扩大:ClassNorFoundException(小) -> Exception(大)

即:子类的方法必须和父类必要一致,方法体不同;

为什么需要重写?

  1. 父类的功能,子类不一定需要,或者不一定满足!

  2. Alt + Insert : override;

package com.paial.Demo03;

public class Person {

   public void print(){
       System.out.println("Person");
  }
}
package com.paial.Demo03;

public class Student extends Person{
   //对父类方法的重写
   @Override
   public void print() {
       System.out.println("Student");
  }
}
package com.paial.Demo03;

public class Application {
   public static void main(String[] args) {
       Person p = new Student();
       p.print();
  }
}

多态

 

标签:name,构造方法,面向对象,OOP,Student,父类,super,public
From: https://www.cnblogs.com/PaiAL/p/17898035.html

相关文章

  • 面向对象编程,看这篇就够了
    一、面向对象编程的概念面向对象编程,是一种程序设计范式,也是一种编程语言的分类。它以对象作为程序的基本单元,将算法和数据封装其中,程序可以访问和修改对象关联的数据。这就像我们在真实世界中操作各种物体一样,比如我们可以打开电视、调整音量、切换频道,而不需要知道电视的内部......
  • OOP
    private是封装的一种表现形式this:1.2.通过this()进行构造器的调用 a.this()必须位于构造器的第一条语句的位置 b.当有n个构造器时,this()最多有n-1个1.可能会出现递归2.idea:1.toString2.getset3.构造器eclipse:1.构造器2.getset3.toString......
  • 秦疆的Java课程笔记:65 面向对象 创建对象内存分析
    先写两个类//创建一个Pet类==============================packageOOP.demo;publicclassPet{publicStringname;publicintage;publicvoidshout(){System.out.println("喵~~");}}//主程序Application================......
  • 面向对象---多态
    多态就是同一个接口,使用不同的实例而执行不同操作多态性(Polymorphism)是面向对象编程的一个重要概念//接口interfaceSoundMaker{voidmakeSound();}//实现接口的基类classAnimalimplementsSoundMaker{@OverridepublicvoidmakeSound(){S......
  • Hadoop NameNode(SecondaryNameNode) Fsimage和Edits解析
    NameNode被格式化之后,将在NameNode目录下产生一些文件1.Fsimage文件Fsimage文件是HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件inode的序列化信息1.查看Fsimage文件1.oiv命令hdfsoiv-p文件类型-i镜像文件-o转换后文件的输出路径hdfs......
  • Java第七课_面向对象编程
    1.面向对象的编程对象publicclassPractice01{publicstaticvoidmain(String[]args){/*面向对象的编程,将一切事项都视为对象.对象用类来描述,过程在类里实现.使用时只需要调用类,不需要再考虑如何实现.将对象的共同特征进行......
  • 七,JAVA面向对象
    对象用类来描述对象,将对象的共同特征进行抽取而形成类大象:类属性:鼻子眼睛:变量行为:跑,拔树:函数同一个类中。成员函数可以直接访问其他成员类与类之间的访问:需要创建对象格式:类名对象名=new类名();Carcar=newCar();//对象名.成员名car.run();c......
  • Hadoop 配置的优先级
    从低到高1.默认配置默认文件文件存放在Hadoop的jar包中的位置core-default.xmlhadoop-common-3.3.6.jar/core-default.xmlhdfs-default.xmlhadoop-hdfs-3.3.6.jar/hdfs-default.xmlyarn-default.xmlhadoop-yarn-common-3.3.6.jar/yarn-default.xmlmapred-d......
  • 【愚公系列】2023年12月 面向对象设计原则(七)-迪米特法则(Law of Demeter or LoD)
    ......
  • Java 面向对象入门
    第一章:类与对象1.1类与对象类与对象的定义和使用在Java中定义类,使用关键字class完成。语法如下:class类名称{属性(变量);行为(方法);}我们可以通过下面的实例来感受一下如何定义一个Person类。classPerson{//类名称首字母大写Stringn......