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/9girl.play(animal);}
}

四、权限修饰符

1、private

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

2、default

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

3、protected

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

4、public

在整个项目中都可以访问

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


在这里插入图片描述

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

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

相关文章

Redis系列-5 Redis分布式锁

背景: 本文介绍Redis分布式锁的内容,包括Redis相关命令和Lua脚本的介绍,以及操作分布式锁的流程与消息,最后结合Redission源码介绍分布式锁的实现原理。 1.基本命令 1.1 基本键值对的设置 设值: set key value 取值: get key …

SPI通信协议

SPI通信结介绍 W25Q64是一个Flash存储器芯片,内部可以存储8M字节的数据,并且是掉电不丢失的。 四根通信线:SCK(Serial Clock)串行时钟线、MOSI(Master Output Slave Input)主机输出从机输入、M…

【十大排序算法】快速排序

在乱序的世界中,快速排序如同一位智慧的园丁, 以轻盈的手法,将无序的花朵们重新安排, 在每一次比较中,沐浴着理性的阳光, 终使它们在有序的花园里,开出绚烂的芬芳。 文章目录 一、快速排序二、…

profile-3d-contrib,github三维立体图的使用

图片展示: 提示: 这个profile-3d-contrib存储库有时候会出现问题,导致又有使用这个存储库svg的用户显示出现问题. 参考: https://zhuanlan.zhihu.com/p/681786778 原仓库链接: GitHub - yoshi389111/github-profile-3d-contrib: This GitHub Action creates a Gi…

【算法刷题 | 动态规划08】6.9(单词拆分、打家劫舍、打家劫舍||)

文章目录 21.单词拆分21.1题目21.2解法:动规21.2.1动规思路21.2.2代码实现 22.打家劫舍22.1题目22.2解法:动规22.2.1动规思路22.2.2代码实现 23.打家劫舍||23.1题目23.2解法:动规23.2.1动规思路23.2.2代码实现 21.单词拆分 21.1题目 给你一…

java中的异常-异常处理(try、catch、finally、throw、throws)+自定义异常

一、概述 1、java程序员在编写程序时提前编写好对异常的处理程序,在程序发生异常时就可以执行预先设定好的处理程序,处理程序执行完之后,可以继续向后执行后面的程序 2、异常处理程序是在程序执行出现异常时才执行的 二、5个关键字 1、tr…

Redis实战篇02

1.分布式锁Redisson 简单介绍: 使用setnx可能会出现的极端问题: Redisson的简介: 简单的使用: 业务代码的改造: private void handleVoucherOrder(VoucherOrder voucherOrder) {Long userId voucherOrder.getUserI…

2024真机项目

项目需求: 1. 172.25.250.101 主机上的 Web 服务要求提供 www.exam.com 加密站点,该站点在任何路由可达 的主机上被访问,页面内容显示为 "Hello,Welcome to www.exam.com !",并提供 content.exam.com/yum/A…

数据:人工智能的基石 | Scale AI 创始人兼 CEO 亚历山大·王的创业故事与行业洞见

引言 在人工智能领域,数据被誉为“新石油”,其重要性不言而喻。随着GPT-4的问世,AI技术迎来了新的浪潮。众多年轻创业者纷纷投身这一领域,Scale AI的创始人兼CEO亚历山大王(Alexander Wang)就是其中的佼佼…

什么是Java?

什么是Java?java是什么?下面我们来总结一下。 java是什么? java是一个静态编程语言,具有强大的多线程特征,目前java不仅采用c语言的优点,还去掉了一些多继承指针,等复杂的概念,我们…

Git配置 安装及使用

团队开发的神 找工作必备 环境变量 配置好环境后 打开终端环境 winr cmd 我习惯在桌面打开,然后进入相应的文件夹 (文件夹结构) (个人感觉能用cmd不用git,cmd更好用一些) 进入对应的文件夹 填写自己对…

docker安装rabbitmq详解

目录 1、安装 1-1.查看rabbitmq镜像 1-2.下载Rabbitmq的镜像 1-3.创建并运行rabbitmq容器 1-4.查看启动情况 1-5.启动web客户端 1-6.访问rabbitmq的客户端 2..遇到的问题 解决方法: 1、安装 1-1.查看rabbitmq镜像 docker search rabbitmq 1-2.下载Rabbitmq的镜像 拉…

国标GB/T 28181详解:校时流程详细说明

目录 一、定义 二、作用 1. 时间同步性 2. 事件记录的准确性 3. 跨平台、跨设备协作 4. 降低时间误差 5. 安全性提升 三、基本要求 四、命令流程 五、协议接口 六、校时效果 1、未校时的情况 2、校时后的效果 七、参考 一、定义 GB28181协议要求所有的监控设…

python后端结合uniapp与uview组件tabs,实现自定义导航按钮与小标签颜色控制

实现效果(红框内): 后端api如下: task_api.route(/user/task/states_list, methods[POST, GET]) visitor_token_required def task_states(user):name_list [待接单, 设计中, 交付中, 已完成, 全部]data []color [#F04864, …

CPP初阶:CPP的内存管理模式

目录 一.new和delete操作自定义类型 1.1C语言的内存管理 1.2CPP的内存管理方式 1.3C与CPP内存管理的差异 二.operator new和operator delete函数 三.CPP空间操作符使用深化 3.1 连续内存开辟与释放 3.2 非连续内存开辟与释放 四.new和delete的实现原理 4.1内置类型 4.2…

100道面试必会算法-32-二叉树右视图用栈实现队列

100道面试必会算法-32-二叉树右视图&用栈实现队列 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,n…

【内网攻防实战】红日靶场(一)续篇_金票与银票

红日靶场(一)续篇_权限维持 前情提要当前位置执行目标 PsExec.exe拿下域控2008rdesktop 远程登录win7msf上传文件kail回连马连上win7upload上传PsExec.exe PsExec.exe把win7 带到 2008(域控hostname:owa)2008开远程、关防火墙Win7…

OpenCV绘制直线

一 绘制图形 画线 画矩形 画圆 画椭圆 画多边形 绘制字体 二 画线 line(img,开始点,结束点,颜色…) 参数结束 img:在那个图像上画线 开始点,结束点:指定线的开始与结束位置; 颜色,线宽,线体…

Linux系统编程(十二)线程同步、锁、条件变量、信号量

线程同步: 协同步调,对公共区域数据按序访问。防止数据混乱,产生与时间有关的错误。数据混乱的原因 一、互斥锁/互斥量mutex 1. 建议锁(协同锁): 公共数据进行保护。所有线程【应该】在访问公共数据前先拿…

文心一言 VS 讯飞星火 VS chatgpt (277)-- 算法导论20.3 4题

四、如果调用 vEB-TREE-INSERT 来插入一个已包含在 vEB 树中的元素,会出现什么情况?如果调用 vEB-TREE-DELETE 来删除一个不包含在 vEB 树中的元素,会出现什么情况?解释这些函数为什么有相应的运行状况?怎样修改 vEB 树…