JavaSE (Java基础):面向对象(上)

8 面向对象

面向对象编程的本质就是:以类的方法组织代码,以对象的组织(封装)数据。


8.1 方法的回顾

package com.oop.demo01;


// Demo01 类
public class Demo01 {

    // main方法
    public static void main(String[] args) {
        int c = 10;
        int d = 90;
        
        System.out.println(max(c,d));
        sayHello();
    }

    /*
    修饰符 返回值类型   方法名(...){
        // 方法体
        return 放回值;
    }
     */


    // return 结束方法,返回一个结果!
    public static String  sayHello(){
        return "Hello,world";
    }

    public static int max(int a,int b){
        return a>b ? a : b; // 三元运算符;
    }
    
}

           如果没有返回值在方法中的话,结果就会如下这段代码所示:

package com.oop.demo01;

// 值传递
public class Demo04 {
    public static void main(String[] args) {
        int a = 1;
        
        // a 的值始终没有改变过都还是1
        System.out.println(a); // 1

        change(a);

        System.out.println(a); // 1
    }

    // 返回值为空
    public static void change(int a){
        a = 10;
    }
}


8.2 类与对象的创建、基础使用

        关于类的创建就是直接在IDEA中的文件下直接创建类,就是点Java的文件,进行编译以后就是点class的文件。创造对象就是:对象类型 对象名 = 对象值。

        我是这样理解的:

        类就可以看做一个做蛋糕的模具,而对象就是按照这个模具所做出来的一个个蛋糕,蛋糕可以外表一样,但是名字可以不一样。比如都是用Student这个类来创建对象。却可以有:

          Student S1 = new Student();

          Student S2 = new Student();

          Student S3 = new Student();........................等等

package com.oop.demo01;

public class Demo02 {
    // 静态方法
    // 非静态方法

    public static void main(String[] args) {
        //实例化这个类
        // 对象类型  对象名 = 对象值
        Student student = new Student();
        student.say();
    }

    // 有static就是和类一起加载的
    public static void a(){
        //c();  -->这里的方法如果调用的话会直接报错。
        /*
            因为被static修饰过的方法是和类一起加载的,
            而他所调用的这个方法没有被static修饰,所以在实例化之后才存在。
         */
    }
    
    // 类实例化之后才存在
    public void c(){
        
    }
}

         可以在类里面再创建一个类,并且在里面的类里调用其他的类,如下面这段代码:

package com.oop.demo01;

// 引用传递:对象,本质还是值传递
public class Demo05 {
    public static void main(String[] args) {

        Perosn perosn = new Perosn();
        System.out.println(perosn.name); // null

       change(perosn); // 调用了方法change
        System.out.println(perosn.name); // 周某
    }

    public static void change(Perosn perosn){
        // perosn是一个类:指向的---> Perosn perosn = new Perosn();这是一个具体的人,可以改变属性
        perosn.name = "周某";
    }
}

//定义了一个Perosn类,有一个属性:name
class Perosn{
    String name; //这里定义了一个name属性,返回值为默认的null
}


8.3 构造器

        关于构造器:一个类即使什么都不行都会存在一个方法,这个方法是一个没有参数的方法,

当我们创建对象时所使用的new关键字本质上是在调用我们的构造器。

        需要注意的是:我们可以定义有参数的构造器,如果定义了他,就需要再一次定义本身已经存在的无参构造器。

package com.oop.demo02;

// java ---> class
public class Person {
    // 一个类及时什么都不写它也会存在一个方法
    // 显示的定义构造器

    String name;
    // 实例化初始值
    //1. 使用new关键字,本质是在调用构造器
    //2. 用来初始化值
    // 无参的构造器
    public Person(){
        this.name = "周某";
    }


    // 有参构造:一旦定义了有参构造,无参就必须显示定义
    public Person(String name){
        this.name = name;
    }
}
/*
在可执行的类中的代码:
public class AppLication {

    public static void main(String[] args) {

        //new 实例化了一个对象
        Person person = new Person("周鹭巡");
        System.out.println(person.name); // 周某

    }
}

    构造器:
        1. 和类名相同
        2.没有返回值
    作用:
        1. new 本质在调用构造方法
        2. 初始化对象的值
    注意点:
        定义有参构造之后,如果想使用无参构造,显示定义一个无参的构造
 */


8.4 封装

        关于封装就是在类里面定义属性的时候使用修饰符private,在这个类里面可以定义一些可以操作这个属性的方法,这些方法需要特定的名称。

        get元素名 :获得这个元素的值

        set元素名 :设置这个元素的值

package com.oop.demo04;

public class Student {
    // 属性私有
    private String name;
    private int id;
    private String sex;
    private int age;


    // 提供一些可以操作这个属性的方法!
    // 提供一些public的get、set方法!

    // get 获得这个数据
    public String getName(){
        return this.name;
    }

    // set 给这个数据设置值
    public void setName(String name){
        this.name = name;
    }

    public int getId(){
        return this.id;
    }

    public void setId(int id){
        this.id = id;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age < 120 && age > 0){
            this.age = age;
        } else{
            this.age = 20;
        }

    }
}

/*
在可执行类中的代码:
    public static void main(String[] args) {
            Student S1 = new Student();
            S1.setName("周鹭巡");
            S1.setAge(999);
            S1.setId(35);
            S1.setSex("男");

            System.out.println(S1.getSex());
            System.out.println(S1.getId());
            System.out.println(S1.getName());
            System.out.println(S1.getAge());
        }




        封装:
        1.  提高了程序的安全性,保护数据
        2.  隐藏代码的实现细节
        3.  统一接口
        4.  系统可维护增加了
 */


8.5 继承、Super

        继承就是直接在类名后面跟上关键词extends与父类的名字,子类可以继承父类的所有方法。

        Super就是在子类中调用父类中的属性或者父类中的方法。

        直接在子类的构造器的代码第一行使用代码super();,就是调用父类的构造器。

        

Person父类:
 

package com.oop.demo05;

// 在Java中,所有的类,都默认直接或者间接继承Object
// Person 人:父类
public class Person /*extends Object*/ {

    public Person() {
        System.out.println("Person无参执行了");
    }

    private int money = 10_0000_0000;
    public void say(){
        System.out.println("说什么呢?");
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    protected String name = "zhoumou";

    // 私有的东西无法被继承
    public void print(){
        System.out.println("Person");
    }
}

 Student子类:

package com.oop.demo05;


// 学生 is 人: 派生类,子类
// 子类继承了父类,就会拥有父类的全部方法!
public class Student extends Person {
    // Ctrl + H


    public Student() {
        // 隐藏代码:调用了父类的无参构造
        super();//调用父类的构造器,必须在子类构造器的第一行

        System.out.println("Student无参构造执行了");
    }

    public void print(){
        System.out.println("Student");
    }

    public void test1(){
        print();
        this.print();
        super.print();
    }
    private String name = "zlx";
    public void test(String name){
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }
}

8.6 方法的重写

        我是这么理解的,当创建对象时,类型为这个对象所属的父类时,他所调用的父类引用的方法是指向的子类,就好像儿子不听爸爸话了。

        其实方法的重写就是调用方法是,方法的修饰符静态与非静态的区别。

        你给别人弄成了静态的话,那么调用时遵循的就是创建对象时左边的数据类型了。

        如果是非静态的话,子类就不听父类话了,就都是向子类的方法看齐,你是调用到的父类的方法,但是引用到的确实子类的方法。

可执行类:

public class AppLication{
    public static void main(String[] args) {
         
        //静态的方法与非静态的方法区别很大
        // 方法的调用只和左边的数据类型有关
        A a = new A();
        a.test();


        // 父类的引用指向了子类
        B b = new A();
        b.test();


    }
}

A类:

package com.oop.demo05;

public class A extends B {
    @Override // 注解:有功能的注释!
    public void test() {
        System.out.println("A=>test()");
    }
}

B类:

package com.oop.demo05;

// 重写都是方法的重写与属性无关
public class B {

    public void test(){
        System.out.println("B=>test()");
    }
}

执行后的结果就是:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/760498.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年的Facebook营销:超级完整指南

Facebook营销不是可选的&#xff0c;是必须的。Facebook是世界上使用最多的社交平台&#xff0c;每天吸引22.9亿活跃用户。 它也不全是度假照片和虚张声势。对于53.2% 的 16-24 岁互联网用户&#xff0c;社交媒体是他们进行品牌研究的主要来源。而且&#xff0c;66% 的 Facebo…

GoSync+华为智能穿戴使用指导

GoSync官方简介&#xff1a; GoSync 是一款免费应用程序&#xff0c;主要用于将您的可穿戴设备中的步行、跑步、骑自行车和游泳等活动数据同步到您的 Google Fit 和其他健身平台。在开始同步数据之前&#xff0c;您需要将您的可穿戴设备账户与您的健身平台账户连接起来。在创建…

WEB攻防【5】——JS项目/Node.js框架安全/识别审计/验证绕过

1、test.php和test.html对比 #知识点&#xff1a; 1、原生JS&开发框架-安全条件 2、常见安全问题-前端验证&未授权 #详细点: 1、什么是Js渗透测试? 在Javascript中也存在变量和函数&#xff0c;当存在可控变量及函数调用即可参数漏洞 JS开发的WEB应用和PHP、java.NET…

WebRtc实现1V1音视频通话

简介 WebRTC&#xff0c;名称源自网页实时通信&#xff08;Web Real-Time Communication&#xff09;的缩写&#xff0c;是一个支持网页浏览器进行实时语音通话或视频聊天的技术&#xff0c;是谷歌 2010 年以 6820 万美元收购 Global IP Solutions 公司而获得的一项技术。 WebR…

STM32之四:TIM定时器(1-基本定时器)

目录 1. STM32有哪些定时器 2. 基本定时器 2.1 基本定时器主要功能 2.2 基本定时器的框图 2.2.1 时钟输入 2.2.2 至DAC 2.2.3 至时基单元&#xff08;重点&#xff09; 2.2.4 影子寄存器 2.2.5 基本定时器寄存器说明 2.2.5.1 控制寄存器1&#xff08;TIMx_CR1&#x…

压缩包怎么解压,解压压缩包不损坏文件

常见格式&#xff1a; ZIP&#xff1a;最常见的压缩文件格式之一&#xff0c;支持跨平台。RAR&#xff1a;另一种常见的压缩文件格式&#xff0c;通常压缩率比ZIP高&#xff0c;但不如ZIP普及。7Z&#xff1a;来自7-Zip的压缩格式&#xff0c;支持更高的压缩率和一些高级特性。…

设计NOR Flash(FMSC接口)的Flashloader(MCU: stm32f4)

目录 概述 1 硬件 1.1 MCU和S29GL128P10TFI01控制电路 1.1.1 S29GL128P10TFI01 1.1.2 MCU与NOR Flash接口 1.2 STM32F4的FSMC接口 1.2.1 时序信号 1.2.2 外部存储器接口信号 2 Flash leader功能实现 2.1 框架结构介绍 2.2 S29GL128P10TFI01的Flash leader框架 2.3 N…

人工智能期末复习笔记(更新中)

分类问题 分类&#xff1a;根据已知样本的某些特征&#xff0c;判断一个新的样本属于哪种已知的样本类 垃圾分类、图像分类 怎么解决分类问题 分类和回归的区别 1. 逻辑回归分类 用于解决分类问题的一种模型。根据数据特征或属性&#xff0c;计算其归属于某一类别 的概率P,…

66、基于长短期记忆 (LSTM) 网络对序列数据进行分类

1、基于长短期记忆 (LSTM) 网络对序列数据进行分类的原理及流程 基于长短期记忆&#xff08;LSTM&#xff09;网络对序列数据进行分类是一种常见的深度学习任务&#xff0c;适用于处理具有时间或序列关系的数据。下面是在Matlab中使用LSTM网络对序列数据进行分类的基本原理和流…

XJTUSE-数据结构-homework1

任务 1 题目&#xff1a; 排序算法设计&#xff1a; 需要写Selection、Shell、Quicksort 和 Mergesort四种排序算法&#xff0c;书上讲述比较全面而且不需要进行额外的优化&#xff0c;下面我简要地按照自己的理解讲述。 Selection&#xff08;选择排序&#xff09;&#xff…

HarmonyOS Next开发学习手册——单选框 (Radio)

Radio是单选框组件&#xff0c;通常用于提供相应的用户交互选择项&#xff0c;同一组的Radio中只有一个可以被选中。具体用法请参考 Radio 。 创建单选框 Radio通过调用接口来创建&#xff0c;接口调用形式如下&#xff1a; Radio(options: {value: string, group: string})…

Linux常用工具使用方式

目录 常用工具&#xff1a; 安装包管理工具&#xff1a; 查找含有关键字的软件包 安装软件 安装文件传输工具 安装编辑器 C语言编译器 C编译器 安装调试器 安装项目版本管理工具 cmake 卸载软件 安装jsoncpp 安装boost库 安装mariadb 安装tree&#xff08;让目录…

Python28-3 朴素贝叶斯分类算法

朴素贝叶斯算法简介 朴素贝叶斯&#xff08;Naive Bayes&#xff09;算法是一种基于贝叶斯定理的分类算法。它广泛应用于文本分类、垃圾邮件检测和情感分析等领域。该算法假设特征之间是独立的&#xff0c;这个假设在实际情况中可能并不完全成立&#xff0c;但Naive Bayes在许…

java笔记(30)——反射的 API 及其 使用

文章目录 反射1. 什么是反射2. 获取class字段&#xff08;字节码文件对象&#xff09;方式1方式2方式3应用 3. 获取构造方法和权限修饰符前期准备获取所有的公共构造方法获取所有的构造方法获取无参构造方法获取一个参数的构造方法获取一个参数的构造方法获取两个参数的构造方法…

Java面试题--JVM大厂篇之G1 GC的分区管理方式如何减少应用线程的影响

目录 引言: 正文: 1. 区域划分&#xff08;Region&#xff09; 2. 并行和并发回收 3. 区域优先回收&#xff08;Garbage First&#xff09; 4. 可预测的停顿时间 5. 分阶段回收 6. 复制和压缩 实际效果: 场景举例 1. 减少单次GC的影响 2. 支持高并发环境 3. 优…

数学建模(1):期末大乱炖

1 概述&#xff01;&#xff01; 1.1 原型和模型 原型&#xff1a;客观存在的研究对象称为原型&#xff0c;也称为“系统”、“过程”。 机械系统、电力系统、化学反应过程、生产销售过程等都是原型&#xff1b; 研究原型的结构和原理&#xff0c; 从而进行优化、预测、评价…

一区算法MPA|海洋捕食者算法原理及其代码实现(Matlab/Python))

Matlab/Python&#xff1a; 本文KAU将介绍一个2020年发表在1区期刊ESWA上的优化算法——海洋捕食者算法 (Marine Predators Algorithm&#xff0c;MPA)[1] 该算法由Faramarzi等于2020年提出&#xff0c;其灵感来源于海洋捕食者之间不同的觅食策略、最佳相遇概率策略、海洋记…

【MySQL】Linux下MySQL的目录结构、用户、权限与角色

一、Linux下MySQL的目录结构 1、MySQL相关目录 数据库文件存放路径&#xff1a;/var/lib/mysql数据库命令存放路径&#xff1a;/user/bin和/user/sbin配置文件目录&#xff1a;/usr/share/mysql-8.0/、/usr/share/mysql/和/etc/my.cnf 2、假设我们创建了一个数据库dbtest1&a…

使用evo工具比较ORB-SLAM3的运行轨迹(从安装到解决报错)

ORB-SLAM2和ORB-SLAM3怎么跑出来&#xff0c;之前都有相关的保姆级的教程&#xff0c;下来给大家介绍一款evo工具&#xff0c;给科研加速&#xff01;&#xff01;&#xff01; 文章目录 1.下载evo2.生成轨迹3.evo别的功能使用 1.下载evo 输入命令下载 pip install -i https…

你真的会udf提权???数据库权限到系统权限 内网学习 mysql的udf提权操作 ??msf你会用了吗???

我们在已经取得了数据库的账号密码过后&#xff0c;我们要进一步进行提取的操作&#xff0c;我们mysql有4钟提权的操作。 udf提权(最常用的)mof提权启动项提权反弹shell提权操作 怎么获取密码操作&#xff1a; 怎么获取密码&#xff0c;通过sql注入获取这个大家都应该知道了&a…