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

在这里插入图片描述


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修饰


在这里插入图片描述

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

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

相关文章

【AI 高效问答系统】机器阅读理解实战内容

⭐️我叫忆_恒心,一名喜欢书写博客的研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支…

Git【版本控制命令】

02 【本地库操作】 1.git的结构 2.Git 远程库——代码托管中心 2.1 git工作流程 代码托管中心用于维护 Git 的远程库。包括在局域网环境下搭建的 GitLab 服务器,以及在外网环境下的 GitHub 和 Gitee (码云)。 一般工作流程如下: 1.从远程…

大模型创新企业集结!百度智能云千帆AI加速器Demo Day启动

新一轮技术革命风暴席卷而来,为创业带来源源不断的创新动力。过去一年,在金融、制造、交通、政务等领域,大模型正从理论到落地应用,逐步改变着行业的运作模式,成为推动行业创新和转型的关键力量。 针对生态伙伴、创业…

基于STM32开发的智能机器人导航系统

目录 引言环境准备智能机器人导航系统基础代码实现:实现智能机器人导航系统 4.1 距离传感器数据读取4.2 电机控制4.3 实时路径规划与避障4.4 用户界面与状态显示应用场景:智能机器人导航与控制问题解决方案与优化收尾与总结 1. 引言 智能机器人导航系…

五款软件推荐:U盘数据不小心删除了?帮你快速找回!

U盘数据不小心删除了怎么恢复?U盘是一种便携式存储设备,因其小巧轻便而广受欢迎。但是,U盘也常常会遇到数据丢失的问题。当U盘数据丢失时,需要找到一款可靠的数据恢复软件来恢复数据。 接下来为大家推荐5款好用的免费U盘数据恢复软…

Django更改超级用户密码

Django更改超级用户密码 1、打开shell 在工程文件目录下敲入: python manage.py shell再在python交互界面输入: from django.contrib.auth.models import User user User.objects.get(username root) user.set_password(123456) user.save()其中ro…

c++中, 直接写浮点数, 是float 还是 double?

如果直接一个浮点数, 那么他默认是float还是double呢? 测试用例 #include <iostream> using namespace std;int main() {auto x 0.2;float f 0.2;double d 0.2;cout << "x Size : " << sizeof(x) << " bytes" << endl…

关于人生规划(下)

&#xff08;关于人生规划(3)&#xff09; &#xff08;关于人生规划(4)&#xff09; 没有补充能量的后防线级别的大本营&#xff0c;是没办法长时间在外奋斗的。无论如何消耗能量&#xff0c;回到家里就可以补充能量。 无论你是单身还是结婚状态&#xff0c;家一定是一个非常温…

像素坐标系与图像坐标系

前言 在数字图像处理中&#xff0c;经常会看到使用 (x, y) 表示图像中的某个像素点。 在一些图像处理库&#xff0c;例如 Pillow 、OpenCV 、Numpy 中也会使用到坐标系处理图像的像素点。 介绍 无论是像素坐标系还是图像坐标系&#xff0c;其原理都是一样的&#xff1a; 以…

BC8 十六进制转十进制

BC8 十六进制转十进制 废话不多说上题目&#xff1a; 代码如下&#xff1a; #include<stdio.h> int main() {printf("%15d", 0XABCDEF);return 0; }这里总结下C语言的常见语法点&#xff1a; 1&#xff1a;%m.n&#xff0c;m表示整个数值占多少位包括小数点&am…

CloudFlare 防火墙规则里开放合法 Bot 爬虫的方法

明月使用 CloudFlare 也算是有一阵子了,可以说效果非常好更是非常满意,毕竟每天成千上万的 Web 攻击和 cc 攻击都能控制在几乎可以忽略不计的程度了,上次因调试需要关闭了国内线路上的网站卫士统计图覆对比就很能说明这点儿: 这是关闭防火墙当天的实时防御统计结果 这是开启…

【BUG】已解决:Could not find a version that satisfies the requirement tensorflow

已解决&#xff1a;Could not find a version that satisfies the requirement tensorflow 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;同时是武汉城市开发者社区主理人 擅长.net、C…

一定要了解的 WordPress 数据库中默认 12 个表

WordPressan 安装的时候会有 12 张默认的数据表,每张表的数据都包含了 WordPress 不同的功能。看看这些表的结构,你能很容易的了解网站不同的部分都是存在哪里的。目前,默认的 WordPress 安装会创建如下的数据表。 注意:每张表名前面的 wp_ 是你在安装过程中选择的数据库前…

山水有相逢 来日皆可期

毕业接踵而至&#xff0c;大家都在拍照记录留恋毕业的美好时光碎片。但由于最近实在“玩得太嗨”&#xff0c;无心拍毕业照。 默海笑&#xff0c;当然是需要用自己的方式来为这浑浑噩噩的大学生活画上句号。 我相信&#xff0c;毕业时的你我都会无比的感慨&#xff0c;为什么时…

深度网络及经典网络简介

深度网络及经典网络简介 导语加深网络一个更深的CNN提高识别精度Data Augmentation 层的加深 经典网络VGGGoogLeNetResNet 高速学习迁移学习GPU分布式学习计算位缩减 强化学习总结参考文献 导语 深度学习简单来说&#xff0c;就是加深了层数的神经网络&#xff0c;前面已经提到…

关于stm32的软件复位

使用软件复位的目的&#xff1a; 软件复位并不会擦除存储器中的数据&#xff0c;它只是将处理器恢复到复位状态&#xff0c;即中断使能位被清除&#xff0c;系统寄存器被重置&#xff0c;但RAM和Flash存储器中的数据保持不变。 STM32软件复位(基于库文件V3.5) &#xff0c;对…

英特尔:AI落地,未来已来

引言 随着AI技术的发展和大模型的普及&#xff0c;人工智能正在逐渐渗透到我们的日常生活中。2023年5月底&#xff0c;我参加了台北的英特尔技术展&#xff0c;深入了解了英特尔在AI个人电脑领域的最新进展。本文将详细介绍英特尔的新一代移动处理器Lunar Lake&#xff0c;以及…

笔记-Python中的struct模块

了解c语言的人&#xff0c;一定会知道struct结构体在c语言中的作用&#xff0c;它定义了一种结构&#xff0c;里面包含不同类型的数据(int,char,bool等等)&#xff0c;方便对某一结构对象进行处理。而在网络通信当中&#xff0c;大多传递的数据是以二进制流&#xff08;binary …

《Brave New Words 》1.1 抛弃瓶子

Part I: Rise of the AI Tutor 第一部分&#xff1a;AI 导师的崛起 A great teacher can teach calculus with a paper clip and literature in an empty field. Technology is just another tool, not a destination. —Unknown 一位伟大的教师可以用回形针教微积分&#xff0…

【线性代数】向量空间,子空间

向量空间 设V为n维向量的集合&#xff0c;如果V非空&#xff0c;且集合V对于向量的加法以及数乘两种运算封闭&#xff0c;那么就称集合V为向量空间 x&#xff0c;y是n维列向量。 x 向量组等价说明可以互相线性表示 向量组等价则生成的向量空间是一样的 子空间 例题18是三位向…