Java oop(一些自己的理解,并没有展开很细)
一下内容是自己总结用的,只是按照自己的理解去写。参考的是菜鸟教程。
Java 是一个面向对象的语言。
OOP就是面向对象编程。
封装:在某些类里面,某些属性不想向外暴露,但是我们又想提供一个方法去访问或修改它,怎么办?
封装此刻就是解决这个问题:
如有一个Student类
public class Student{
//构造函数,可以写可以不写,不写就默认用Java提供的默认构造函数
private int number;
private String name;
public void setNumber(int number){
this.number = number;
}
public int getNumber(){
return this.number;
}
public void setName(String name){
this.number = number;
}
public int getName(){
return this.name;
}
}
此刻,Student类的俩个属性是private(私有)的,我们不能直接用:
Student stu = new Student();
stu.number = 4;
stu.name = "test";
但是方法是public(公共)的,我们可以通过调用这些方法去写入或获得这俩个私有属性:
Student stu = new Student();
stu.setNumber(4);
stu.getNumber;
stu.setName("test");
stu.getName;
这就是对类的封装,封装有什么好处?
1. 良好的封装能够减少耦合。
2. 类内部的结构可以自由修改。
3. 可以对成员变量进行更精确的控制:
类的成员变量可以成为只读或者只写的。
例如访问器getXxxx();修改器setXxxx(); 通过这些可以控制读写权限
4. 隐藏信息,实现细节:
比如这是一个类中得到生日的方法
public String getBirthday(){
return year + "-" + month + "-" + day;
}
public void setBirthday(String birthday){
//拆分字符串,分别取出年月日,给year、month、day进行赋值
}
而在外部调用这个方法的时候
this.getBirthday();
this.setBirthday("1990-9-9");
此时就体现出外部是不知道如何储存birthday这个方法的,用户只能调用它。
继承
Java里,可以让一个子类去extend(继承)一个父类,并且一个子类只能继承一个父类,
子类会继承父类的所有方法。
而在这些方法中,只要不该方法名称 和其参数类型和数量,只对方法里面的代码进行重写,则叫重写,
如果这些方法中,名称不变,但是参数类型有变,或者参数数量有变,又或者俩者都有变,则叫重载。
重写和重载是多态的一部分。
当然有可能父类是个抽喜类,子类继承抽象类则要对父类里的抽象方法加上具体的代码,如果没有则子类中的这个方法也要声明为抽象方法,子类则声明为抽象类,默认public。
由子子类去继承实现抽象方法(你也可以继续上面的情况)。
多态
一个工具,不同的使用就产生不同的结果或行为。
多用于接口?
其中重写和重载是多态的重要部分。
重写要有继承,并且发生在俩个类之间(父子类)
重载发生在一个类之间。
Java oop(一些自己的理解,并没有展开很细)的更多相关文章
- java oop详解
近日来重温了一下java oop的知识.加深了对面向对象的理解.尤其时继承方面.故写一篇博客.记录一下自己的想法和心得 1.面向对象主要分为三大点(封装,继承,多态) 封装的思想促进了类的形成.相比于 ...
- 一篇文章带你了解Java OOP思想
Java OOP 思想深度刨析 Java面向对象编程 面向对象编程简称OOP(Object--对象.Oriendted--导向的.Programming--程序设计) 面向对象通俗来讲,就是指使用丰富 ...
- 【转】关于Java的Daemon线程的理解
原文地址:http://www.cnblogs.com/ChrisWang/archive/2009/11/28/1612815.html 关于Java的Daemon线程的理解 网上对Java的Dae ...
- 深入浅出OOP(六): 理解C#的Enums
MSDN定义:枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法. 例如,假设您必须定义一个变量,该变量的值表示一周中的一天. 该变量只能存储七个有意义的值. 若要定义这 ...
- Java内存管理的进一步理解-模拟过程图解
Java内存管理的进一步理解-模拟过程图解--转载 java的内存管理分为: 1.堆内存:2.栈内存:3.方法区:4.本地方法区 /* 1:方法区 方法区存放装载的类数据信息包括: ...
- java 重写你可以这么理解 因为 方法名和参数类型个数相同 所以这就是重写了 然后 因为是重写 所以 返回值必须相同
java 重写你可以这么理解 因为 方法名和参数类型个数相同 所以这就是重写了 然后 因为是重写 所以 返回值必须相同
- Java中线程同步的理解 - 其实应该叫做Java线程排队
Java中线程同步的理解 我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread). 线程(Thread)是一份独立运行的程序,有自己专用的运行栈.线程有可 ...
- Java ClassLoader加载机制理解 实际例子
针对 Java ClassLoader加载机制理解, 做了个如何自定制简单的ClassLoader,并成功加载指定的类. 不废话,直接上代码. package com.chq.study.cl; im ...
- Java ClassLoader加载机制理解
今天看到了一篇介绍Java ClassLoader加载机器的文章, 才发觉一直来自己的肤浅, 好好地给补了一课, 不得不存档! 原文地址: http://www.blogjava.net/lhulcn ...
随机推荐
- 关于Redis处理高并发
Redis的高并发和快速原因 1.Redis是基于内存的,内存的读写速度非常快: 2.Redis是单线程的,省去了很多上下文切换线程的时间: 3.Redis使用多路复用技术,可以处理并发的连接.非阻塞 ...
- Django troubleshootings
当在云服务器上部署Django服务时: 1. 首先要在云上的主机上添加相应的端口访问权限. 2. 在project下面的urls.py里面设置如下: ALLOWED_HOSTS = ['www.aby ...
- 从Scratch到Python——python turtle 一种比pygame更加简洁的实现
从Scratch到Python--python turtle 一种比pygame更加简洁的实现 现在很多学校都开设了Scratch课程,学生可以利用Scratch创作丰富的作品,然而Scratch之后 ...
- Valotile关键字详解
在了解valotile关键字之前.我们先来了解其他相关概念. 1.1 java内存模型: 不同的平台,内存模型是不一样的,我们可以把内存模型理解为在特定操作协议下,对特定的内存或高速缓存进行读写访问 ...
- Caused by : java.io.IOException: Cleartext HTTP traffic to 《“url”》 not permitted
一.问题原因: 根本原因是从Android9.0开始,出于完全因素考虑,默认不再支持http网络请求,需要使用 https. 二.解决方案: 解决的基本思路是:对指定的网址进行过滤,强制允许指定网址继 ...
- gitlab-runner部署
Gitlab在线安装部署参考 一. 环境 系统 版本 备注 Centos 7_64 建议使用4GB RAM和4或8个CPU内核 二. 安装并配置必要的依赖项 a) 在centos ...
- prometheus相关文章
prometheus book https://yunlzheng.gitbook.io/prometheus-book/ 开发自己的分布式监控Prometheus Exporter时遇到的坑 htt ...
- (最完美)红米手机5的Usb调试模式在哪里打开的教程
就在我们使用安卓手机接通PC的时候,或者使用的有些app比如我们企业营销部门就在使用的app引号精灵,之前老版本就需要开启usb开发者调试模式下使用,现就在新版本不需要了,如果手机没有开启usb开发者 ...
- ftp定时任务-日志备份
1. 安装 #yum -y install vsftpd 2. 修改配置文件 #vi /etc/vsftpd/vsftpd.conf FTP服务器的默认目录是/var/ftp,而且当用户以匿名方式登录 ...
- Educational Codeforces Round 5F. Expensive Strings
题意:给n个串ti,ps,i是s在ti中出现的次数,要求找到s,使得\(\sum_{i=1}^nc_i*p_{s,i}*|s|\)最大 题解:sam裸题,每次插入时相当于在fail链上到1的位置加ci ...