Java面向对象-[封装、继承、多态、权限修饰符]

news2024/11/23 7:41:04

在这里插入图片描述


Java面向对象-封装、继承、权限修饰符

  • 一、封装
    • 1、案例1
    • 2、案例2
  • 二、继承
    • 1、案例1
    • 2、总结
  • 三、多态
    • 1、案例
  • 四、权限修饰符
    • 1、private
    • 2、default
    • 3、protected
    • 4、public

一、封装

1、案例1

package com.msp_oop;

public class Girl {
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age >= 30){
            this.age=18;
        }
        else{
            this.age = age;
        }
    }
}

package com.msp_oop;

public class Test {
    public static void main(String[] args) {
        Girl g = new Girl();
//        g.age = 18;
//        System.out.println(g.age);
        g.setAge(50);
        System.out.println(g.getAge());
    }
}

对于age属性,加了修饰符private,这样外界对它的访问就受到了限制,现在我还想加上其他的限制条件,但是在属性本身没有办法再加了,通过定义方法进行限制条件的添加。
以属性为案例:
进行封装:
1、将属性私有化,被private修饰——》加入权限修饰符;一旦加入了权限修饰符,其他人就不可以随意的获取这个属性。
2、提供public修饰的方法让别人来访问/使用
3、即使外界可以通过方法来访问属性了,但是也不能随意访问,因为咱们方法中加了判断逻辑。
4、实际开发中,方法一般写成setter、getter方法

2、案例2

package com.msp_oop;

public class Student {
    private int age;
    private String name;
    private String sex;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        if ("男".equals(sex) || "女".equals(sex)) {
            this.sex = sex;
        }
        this.sex = "男";
    }

    //加入构造器
    public Student() {

    }

    public Student(int age, String name, String sex) {
        this.name = name;
        this.age = age;
//        this.sex=sex;
        this.setSex(sex);

    }
}
package com.msp_oop;

public class Test_Student {
    public static void main(String[] args) {
        Student st = new Student();
        st.setName("kobe");
        st.setAge(20);
        st.setSex("女");
        System.out.println(st.getName()+"---"+st.getAge()+"---"+st.getSex());

        Student st1 = new Student(40,"james","男1");
        System.out.println(st1.getName()+"---"+st1.getAge()+"---"+st1.getSex());
    }
}

二、继承

提高代码的复用性
父类定义的内容,子类可以直接拿过来用就可以了,不用代码上重复定义。

1、案例1

父类

package com.msp_oop1;

public class Person {
    //属性
    private int age;
    private String name;
    private double height;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }
    //方法
    public void eat(){
        System.out.println("eat");
    }
    public void sleep(){
        System.out.println("sleep");
    }


}

子类

package com.msp_oop1;

public class Student extends Person{  //todo 子类继承父类
    private int sno;  //学号

    public int getSno() {
        return sno;
    }

    public void setSno(int sno) {
        this.sno = sno;
    }

    //方法
    public void study(){
        System.out.println("study");
    }
}

测试

package com.msp_oop1;

public class Test {
    public static void main(String[] args) {
        Student st = new Student();
        st.setSno(1001);
        st.setName("kobe");
        st.setAge(18);
        System.out.println(st.getName());
        System.out.println(st.getAge());
        System.out.println(st.getSno());

        st.sleep();
    }
}

需要注意:
父类private修饰的内容,子类实际上也继承,只是因为封装的特性阻碍了直接调用,但是提供了间接调用的方法,可以间接调用。

2、总结

1、继承关系:父类(基类)/子类(extends)
子类继承父类一定在合理的范围继承
2、好处:
a、提高了代码的复用性
b、便于代码的扩展
c、多态的使用
3、父类private修饰的内容,子类也继承过来了。
4、一个父类可以有多个子类
5、一个子类只能有一个直接父类,但是间接的可以继承其他类
6、继承具有传递性
Student——》继承Person——》继承Object

三、多态

1、现有父类,再有子类,叫继承;现有子类,再抽取父类,叫泛化;
2、什么是多态?
多种状态,同一个行为,不同的子类,表现出不同的形态;
多态指的是同一个方法调用,由于对象不同会产生不同的行为。
3、多态的好处:
提高代码的扩展性,符合面向对象的设计原则,开闭原则。
开闭原则:扩展开发,修改关闭。
4、多态的三个要素:
a、继承:Cat——》Animal;Dog——》Animal
b、重写:play()方法
c、父类引用指向子类对象

Dog dog = new Dog();
Animal animal = dog; 
==转化为
Animal animal = new Dog(); 
girl.play(animal )
public void play(Animal an) {
        an.play();
    }

上面的代码,也是多态的一种非常常见的应用场合:父类当方法的形参,然后传入的是具体的子类的对象,然后调用同一个方法,根据传入的子类的不同展现的效果也不同,构成了多态。

1、案例

父类

package com.msb_duotai;

public class Animal {
    public void play() {
        System.out.println("我是小动物,");
    }
}

子类

package com.msb_duotai;

public class Cat extends Animal {
    public void play() {
        System.out.println("和猫玩");
    }
}

package com.msb_duotai;

public class Dog extends Animal {
    public void play(){
        System.out.println("和狗玩");
    }
}

儿童类

package com.msb_duotai;

public class Girl {
    //    public void play(Cat cat){
//        cat.play();
//    }
//
//    public void play(Dog dog){
//        dog.play();
//    }
    //和小动物玩
    public void play(Animal an) {
        an.play();
    }
}

测试类

package com.msb_duotai;

public class Test {
    public static void main(String[] args) {
        Girl girl = new Girl();
//        Cat cat = new Cat();
//        girl.play(cat);
//
//        Dog dog = new Dog();
//        girl.play(dog);

        //动物
        Cat cat = new Cat();
        Dog dog = new Dog();
        Animal animal = dog; // TODO: 2024/6/9
        girl.play(animal);

    }
}

四、权限修饰符

1、private

在当前类中可以访问
在这里插入图片描述
在这里插入图片描述

2、default

同一个包下的其他类都可以访问
在这里插入图片描述
在这里插入图片描述

3、protected

权限到不同包下的子类
在这里插入图片描述
在这里插入图片描述

4、public

在整个项目中都可以访问

总结:
属性、方法,修饰符有四种
private、缺省、protected、public
类修饰符两种:缺省、public
一般属性:用private修饰
一般方法:用public修饰


在这里插入图片描述

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

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

相关文章

ReactRouter——路由配置、路由跳转、带参跳转、新route配置项

目录 写在前面 (一)初步使用router 1.安装react-router-dom 2.创建router结构 3.嵌套路由 4.配置not found页面 (1)确切路由报错页面 (2)未配置路由报错页面 5.重定向 (二)路由跳转 1.组件跳转 2.NavLink 3.js跳转 (三)传递参数 1.searchParams(query)参数 2…

OS复习笔记ch8-3

驻留集 驻留集:指请求分页存储管理中给进程分配的内存块的集合。 在采用了虚拟存储技术的系统中,驻留集大小一般小于进程的总大小。 驻留集,从某种角度可以看成是进程可以常驻内存的内存块的集合。 若驻留集太小,会导致缺页频繁…

Golang | Leetcode Golang题解之第132题分割回文串II

题目&#xff1a; 题解&#xff1a; func minCut(s string) int {n : len(s)g : make([][]bool, n)for i : range g {g[i] make([]bool, n)for j : range g[i] {g[i][j] true}}for i : n - 1; i > 0; i-- {for j : i 1; j < n; j {g[i][j] s[i] s[j] && g[…

CentOS7 配置Nginx域名HTTPS

Configuring Nginx with HTTPS on CentOS 7 involves similar steps to the ones for Ubuntu, but with some variations in package management and service control. Here’s a step-by-step guide for CentOS 7: Prerequisites Domain Name: “www.xxx.com”Nginx Install…

阿里云平台产品创建过程 网页端界面 手机APP

云平台产品创建 登录后选择 产品-物联网-物联网平台&#xff1a; 进入后选择 公共示例-立即试用&#xff1a; 选择 公共示例&#xff1a; 选择 设备管理-产品-创建产品&#xff1a; 产品名称: 传感器 所属品类&#xff1a;自定义品类 节点类型&#xff1a;直连设备 联网方式…

mysql-community-libs-5.7.44-1.el7.x86_64.rpm 的公钥尚未安装

在 CentOS 或 RHEL 系统上安装 RPM 包时&#xff0c;如果遇到“公钥尚未安装”的问题&#xff0c;通常是因为系统没有导入相应的 GPG 公钥。MySQL 官方提供了一个 GPG 公钥&#xff0c;用于验证 RPM 包的签名。 以下是解决该问题的步骤&#xff1a; 下载并导入 MySQL 官方的 GP…

Linux本地搭建DataEase并发布公网远程访问进行数据分析

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务…

目标检测数据集 - 垃圾桶满溢检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;垃圾桶满溢检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如城市道边垃圾桶满溢、小区垃圾桶满溢、社区垃圾桶满溢、农村道边垃圾桶满溢、垃圾集中处理点垃圾桶满溢、公园垃圾桶满溢数据等。数据集标注标签划分为…

Luminar Neo - AI智能修图软件超越PS和LR,简单易用又高效!

很多人都想美化自己的风景和人物的图片&#xff0c;得到更加美丽耀眼的效果。然而&#xff0c;专业摄影师和设计师在电脑上使用的后期工具如 Photoshop 和 LightRoom 过于复杂。 通常为了一些简单的效果&#xff0c;你必须学习许多教程。而一些针对小白用户的“一键式美颜/美化…

度小满金融大模型的应用创新

XuanYuan/README.md at main Duxiaoman-DI/XuanYuan GitHub

晶振十大品牌

晶振是电路的心脏&#xff0c;特别对抖动、稳定度有要求&#xff0c;当然除了稳定度&#xff0c;抖动&#xff0c;还对环境温度有要求&#xff0c;优秀的厂商如下&#xff1a; 链接&#xff1a; 晶振十大品牌-晶振品牌-振荡器品牌-Maigoo品牌榜

大话设计模式解读01-简单工厂模式

本系列的文章&#xff0c;来介绍编程中的设计模式&#xff0c;介绍的内容主要为《大话设计模式》的读书笔记&#xff0c;并改用C语言来实现&#xff08;书中使用的是.NET中的C#&#xff09;,本篇来学习第一章&#xff0c;介绍的设计模式是——简单工厂模式。 1 面向对象编程 …

华为防火墙配置 SSL VPN

前言 哈喽&#xff0c;我是ICT大龙。本期给大家更新一次使用华为防火墙实现SSL VPN的技术文章。 本次实验只需要用到两个软件&#xff0c;分别是ENSP和VMware&#xff0c;本次实验中的所有文件都可以在文章的末尾获取。话不多说&#xff0c;教程开始。 什么是VPN 百度百科解…

Pycharm中import torch报错解决方案(Python+Pycharm+Pytorch cpu版)

pycharm环境搭建完毕后&#xff0c;编写一个py文件demo&#xff0c;import torch报错&#xff0c;提示没有。设置python解释器&#xff1a; 选择conda环境&#xff0c;使用现有环境&#xff0c;conda执行文件找到Anaconda安装路径下Scripts文件夹内的conda.exe&#xff0c;最后…

十大人工智能企业

​​​​​​链接&#xff1a;​​​​​​人工智能品牌排行-人工智能十大公司-人工智能十大品牌-Maigoo品牌榜

发光二极管十大品牌

日常电路设计中&#xff0c;LED是必用的元器件之一&#xff0c;辅助判定电路异常。 十大发光二极管品牌-LED灯珠生产厂家哪家好-LED发光二极管厂家前十-Maigoo品牌榜

MinIO 分布式文件系统 快速入门 这篇就够了

1.MinIO简介 MinIO 是一个开源的对象存储服务&#xff0c;它提供了一个可扩展的分布式文件系统&#xff0c;用于存储和检索任意类型的数据。MinIO 旨在为云原生应用程序提供快速、可靠和成本效益高的存储服务&#xff0c;并支持多种数据格式和协议&#xff0c;如Amazon S3 API。…

深度学习简单概述

概述 理论上来说&#xff0c;参数越多的模型复杂度越高、容量越大&#xff0c;这意味着它能完成更复杂的学习任务。但复杂模型的训练效率低&#xff0c;易陷入过拟合。随着云计算、大数据时代的到来&#xff0c;计算能力的大幅提高可以缓解训练的低效性&#xff0c;训练数据的…

音视频转为文字SuperVoiceToText

音视频转为文字SuperVoiceToText&#xff0c;它能够把视频或语音文件高效地转换为文字&#xff0c;它是基于最为先进的 AI 大模型&#xff0c;通过在海量语音资料上进行训练学习而造就&#xff0c;具备极为卓越的识别准确率。 不仅如此&#xff0c;它支持包括汉语、英语、日语…

springboot 3 oauth2认证this.authorizationService.save(authorization)生成token报错异常

springboot 3 oauth2认证this.authorizationService.save(authorization)生成token报错异常&#xff0c;使用springboot版本3.3.0。 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>&…