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

news2024/10/6 14:28:21

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.coloradmin.cn/o/1889821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么有些人思考得多,决策反而不好?避免过度拟合的终极指南:决策高手的秘密:灰度认知,黑白决策

在决策过程中&#xff0c;过度关注细节可能导致决策效果不佳&#xff0c;这被称为“过度拟合”。为了避免这种情况&#xff0c;我们需要进行“灰度认知&#xff0c;黑白决策”&#xff0c;即接受不确定性&#xff0c;关注整体趋势&#xff0c;设定明确目标&#xff0c;简化选择…

微信小程序 调色板

注意&#xff1a;是在uniapp中直接使用的一个color-picker插件&#xff0c;改一下格式即可在微信小程序的原生代码中使用 https://github.com/KirisakiAria/we-color-picker 这是插件的地址&#xff0c;使用的话先把这个插件下载下来&#xff0c;找到src&#xff0c;在项目创…

STM32CubeMX实现矩阵按键(HAL库实现)

功能描述&#xff1a; 实现矩阵按键验证&#xff0c;将矩阵按键的按键值&#xff0c;通过串口显示&#xff0c;便于后面使用。 实物图 原理图&#xff1a; 编程原理&#xff1a; 原理很简单&#xff0c;就是通过循环设置引脚为低电平&#xff0c;另外引脚扫描读取电平值&…

[Leetcode 128][Medium] 最长连续序列

目录 题目描述 整体思路 具体代码 题目描述 原题链接 整体思路 首先看到找连续升序排序的最长序列长度&#xff0c;想到对数组进行排序预处理。但是排序算法时间复杂度需要O(nlogn)&#xff0c;题目要求时间复杂度为O(n)。因此不能进行排序与处理 接着想到数据结构哈希表&a…

苹果电脑内存满了怎么清理空间垃圾 苹果电脑内存不足怎么办 MacBook优化储存空间

在日常使用苹果电脑过程中&#xff0c;某些用户可能经常会遇到存储空间不足的问题&#xff0c;尤其是当硬盘存储了大量的文件。这不仅影响电脑的运行速度&#xff0c;还可能导致应用程序运行不稳定。 一、节省 MacBook Pro 的空间 苹果电脑的操作系统&#xff08;macOS&#x…

PDF 生成(6)— 服务化、配置化

当学习成为了习惯&#xff0c;知识也就变成了常识。 感谢各位的 关注、点赞、收藏和评论。 新视频和文章会第一时间在微信公众号发送&#xff0c;欢迎关注&#xff1a;李永宁lyn 文章已收录到 github 仓库 liyongning/blog&#xff0c;欢迎 Watch 和 Star。 回顾 前面我们分…

Android 15 应用适配默认全屏的行为变更(Android V的新特性)

简介 Android V 上默认会使用全面屏兼容方式&#xff0c;影响应用显示&#xff0c;导致应用内跟导航标题重合&#xff0c;无法点击上移的内容。 默认情况下&#xff0c;如果应用以 Android 15&#xff08;API 级别 35&#xff09;为目标平台&#xff0c;在搭载 Android 15 的设…

鸿蒙应用笔记

安装就跳过了&#xff0c;一直点点就可以了 配置跳过&#xff0c;就自动下了点东西。 鸿蒙那个下载要12g个内存&#xff0c;大的有点吓人。 里面跟idea没区别 模拟器或者真机运行 真机要鸿蒙4.0&#xff0c;就可以实机调试 直接在手机里面跑&#xff0c;这个牛逼&#xf…

现代智能宠物喂食器方案定制

现代智能宠物喂食器不仅具备定时喂食功能&#xff0c;帮助宠物主人管理宠物的饮食时间和食量&#xff0c;还加入了录音功能和摄像头&#xff0c;使得宠物主人即使不在家也能与宠物保持互动&#xff0c;并实时监控宠物的状况。此外&#xff0c;一些产品还具备紧急预警功能&#…

数据分析:基于聚类的LASSO预测模型包----clustlasso

介绍 clustlasso是结合lasso和cluster-lasso策略的R包&#xff0c;并发表在Interpreting k-mer based signatures for antibiotic resistance prediction。 标准交叉验证lasso分类或回归流程如下&#xff1a; 选择交叉验证数据集&#xff08;数据分割&#xff09;&#xff1…

【计算机网络】网络层(作业)

【一】 1、某主机的 IP 地址为 166.199.99.96/19。若该主机向其所在网络发送广播 IP 数据报&#xff0c; 则目的地址可以是&#xff08;D&#xff09;。 A. 166.199.99.255B. 166.199.96.255C. 166.199.96.0D. 166.199.127.255 解析&#xff1a; 166.199.99.96/19166.199.0…

YOLOv5初学者问题——用自己的模型预测图片不画框

如题&#xff0c;我在用自己的数据集训练权重模型的时候&#xff0c;在训练完成输出的yolov5-v5.0\runs\train\exp2目录下可以看到&#xff0c;在训练测试的时候是有输出描框的。 但是当我引用训练好的best.fangpt去进行预测的时候&#xff0c; 程序输出的图片并没有描框。根据…

nginx转发的问题

我在项目配置的时候遇到一个问题&#xff1a; 配置了域名转发&#xff0c;且配置了https nginx配置如下&#xff1a; server {listen 443 ssl;server_name yourdomain.com;ssl_certificate /path/to/your/certificate.crt;ssl_certificate_key /path/to/your/private.key;loca…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【17】认证服务01

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【17】认证服务01 环境搭建验证码倒计时短信服务邮件服务验证码短信形式&#xff1a;邮件形式&#xff1a; 异常机制MD5参考 环境搭建 C:\Windows\System32\drivers\etc\hosts 192.168.…

2024年软件测试面试题,精选100道,内附文档。。。

测试技术面试题 1、我现在有个程序&#xff0c;发现在 Windows 上运行得很慢&#xff0c;怎么判别是程序存在问题还是软硬件系统存在问题&#xff1f; 2、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 3、测试的策略有哪些&#xff1f; 4、正交表测试用…

lua中判断2个表是否相等

当我们获取 table 长度的时候无论是使用 # 还是 table.getn 其都会在索引中断的地方停止计数&#xff0c;而导致无法正确取得 table 的长度&#xff0c;而且还会出现奇怪的现象。例如&#xff1a;t里面有3个元素&#xff0c;但是因为最后一个下表是5和4&#xff0c;却表现出不一…

mac M2芯片系统版本macOS Sonoma14.4.1 Navicat Premium意外退出问题,报错:Translated Report (Full Report Below)

前言 Mac电脑正在使用的navicat客户端突然闪退了&#xff01;&#xff01;&#xff01;&#xff01; 之前用的好好的。做了可能影响navicat客户端闪退的事情就是把电脑系统升级到了macOS Sonoma14.4.1。后悔莫及&#xff5e; 现象&#xff1a;navicat能正常创建连接&#xff0…

大数据处理引擎选型之 Hadoop vs Spark vs Flink

随着大数据时代的到来&#xff0c;处理海量数据成为了各个领域的关键挑战之一。为了应对这一挑战&#xff0c;多个大数据处理框架被开发出来&#xff0c;其中最知名的包括Hadoop、Spark和Flink。本文将对这三个大数据处理框架进行比较&#xff0c;以及在不同场景下的选择考虑。…

【AI是在帮助开发者还是取代他们?】AI与开发者:合作与创新的未来

目录 前言一、AI工具现状&#xff08;一&#xff09;GitHub Copilot&#xff08;二&#xff09;TabNine 二、AI对开发者的影响&#xff08;一&#xff09;影响和优势&#xff08;二&#xff09;新技能和适应策略&#xff08;三&#xff09;保持竞争力的策略 三、AI开发的未来&a…

CAS操作

CAS 全称:Compare and swap,能够比较和交换某个寄存器中的值和内存中的值,看是否相等,如果相等,则把另外一个寄存器中的值和内存进行交换. (这是一个伪代码,所以这里的&address实际上是想要表示取出address中的值) 那么我们可以看到,CAS就是这样一个简单的交换操作,那么…