一、封装

概念:

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

实现步骤:

修改属性的可见性——设为private。

创建getter/setter方法——用于属性的读写。

在getter/setter方法中加入属性控制语句——对属性值的合法性进行判断。

包:

作用:

管理Java文件;解决同名文件冲突。

定义名:

package 包名

必须放在Java源程序的第一行,包名间可以用“.”隔开。

系统中的包:

java.(功能).(类)

java.lang.(类)——包含Java语言基础的类

java.util.(类)——包含Java语言中各种工具类

java.io.(类)——包含输入、输出相关功能的类

包的使用:

(1)import 包名

(2)Java中包的命名规范是全小写字母拼写

(3)~~.*——加载其下所有文件

访问修饰符:

可以修饰属性和方法的访问范围。
 
访问修饰符 本类 同包 子类 其他
private      
默认    
protected  
public
 
 
 
 
 
 

this关键字:

1、this关键字代表当前对象。 this.属性——操作当前对象的属性。this.方法——调用当前对象的方法。
2、封装对象属性的时候,经常会使用this关键字。

内部类:

定义:

内部类(Inner Class)就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

作用:

1、内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一包中的其他类访问该类。
2、内部类的方法可以直接访问外部类的所有数据,包括私有的数据。

分类:

成员内部类、静态内部类、方法内部类、匿名内部类。
****要使用内部类的方法时,首先创建一个外部类对象,通过 外部类对象.new 内部类() 形式创建内部类对象,最后调用内部类方法。****

成员内部类(普通内部类):

1、定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去new一个内部类对象,即:内部类 对象名=外部类对象.new 内部类();
2、成员内部类的.class文件:外部类名$内部类名.class
3、如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量或方法需使用this关键字(外部类.this.成员变量/方法)。

静态内部类(static修饰的内部类):

1、静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问。
2、若外部类的静态成员和内部类的成员名称相同,可通过 类名.静态成员 访问外部类的静态成员;若不相同,则可通过 成员名 直接调用外部类的静态成员。 3、创建静态内部类对象时,不需要外部类的对象,直接“内部类 对象名=new 内部类(); ”

方法内部类(内部类定义在外部类的方法中,方法内部类只在该方法内可以使用):

1、方法内部类不能使用访问控制符和static修饰符。

二、继承(类与类的一种关系,Java中的继承是单继承)

优势:

子类拥有父类的所有属性和方法(private修饰的无效);实现代码复用。

语法规则:

class 子类 extends 父类

方法的重写:

如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法。返回值类型、方法名、参数类型和个数都要与父类的方法相同才叫方法的重写。

继承的初始化顺序:

初始化父类再初始化子类;先执行初始化对象中属性,再执行构造方法中的初始化。

final关键字:

final可以修饰类、方法、属性和变量。
final修饰类,则该类不允许被继承。
final修饰方法,则该方法不能被重写。
final修饰属性,则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)。
final修饰变量,则该变量的值只能赋一次值,即变为常量。

super关键字:

在对象的内部使用,可以代表父类对象。
访问父类的属性:super.age
访问父类的方法:super.eat()
如果子类构造方法中既没有显式调用父类的构造方法,而父类中又没有无参的构造方法,则编译出错。

object类:

object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承object类。
tostring()方法:返回对象的哈希码(对象地址字符串),可以通过重写tostring()方法表示出对象的属性。
equals()方法:比较的是对象的引用是否指向同一个内存地址。一般情况下比较两个对象时比较的是值是否一致,所以要进行重写。

三、多态(继承是多态的实现基础)

对象的多种形态:

1、引用多态:

父类的引用可以指向本类/子类的对象。

2、方法多态:

创建本类对象时,调用的方法为本类方法。
创建子类对象时,调用的方法为子类重写的方法或者继承的方法。

引用类型转换:

1、向上类型转换(隐式/自动类型转换),是小类型到大类型的转换。
2、向下类型转换(强制类型转换),是大类型到小类型的转换。
3、instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题。

抽象类(abstract class):

1、语法定义:

抽象类前用abstract关键字修饰,则该类为抽象类。

2、应用场景:

a、某些情况下,某个父类只知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。
b、从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。

3、作用:

限制规则子类必须实现某些方法,但不关注实现细节。

4、使用规则:

a、abstract定义抽象类。
b、abstract定义抽象方法,只是声明,不需要实现。
c、包含抽象方法的类是抽象类。
d、抽象类中可以包含普通的方法,也可以没有抽象方法。
e、抽象类不能直接创建,可以定义引用变量。

接口:

1、接口概念:

接口可以理解为一种特殊的类,由全局常量和公共的抽象方法所组成。类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类必须提供某些方法。

2、接口定义:

和类定义不同,定义接口不再使用class关键字,而是使用interface关键字。
[修饰符] abstract interface 接口名[extends 父接口1,父接口2...]
{
零个到多个常量定义...
定个到多个抽象方法的定义...
}
接口就是用来被继承,被实现的,修饰符一般是public,不能使用private和protected修饰接口。
接口中的方法都是抽象方法。
接口中方法不能有方法体。//void geta();

3、使用接口:

一个类可以实现一个或多个接口,实现接口使用implements关键字。Java中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充。
继承父类实现接口的语法为:
[修饰符] class 类名 extends 父类 implements 接口1,接口2...
{
类体部分//如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法
}

如果要继承父类,继承父类必须在实现接口之前。

接口在使用过程中经常与匿名内部类配合使用。
匿名内部类就是没有名字的内部类,所用于关注实现而不关注实现类的名称。
Interface i=new Interface()
{
public void method(){
~~
}
}

四、UML

Unified Modeling Language(统一建模语言/标准建模语言)是一种支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持。
常用UML图——用例图、序列图、类图
常用建模工具——Visio、Rational Rose、PowerDesign

Java学习笔记(三)——封装、继承、多态的更多相关文章

  1. java学习笔记6--类的继承、Object类

    接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...

  2. Java学习笔记(十)——多态

    一.多态 1.对象的多种形态 (1)引用多态: 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 (2)方法多态: 创建本类对象时,调用的方法为本类方法: 创建子类对象时,调用的方法是子类方 ...

  3. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  4. C#学习笔记_10_设计模式&继承&多态

    10_设计模式&继承&多态 设计模式 由前人总结的用来解决特定问题的解决方案 单例模式 在一个项目的不同模块中获取对象,获取到的是同一个对象 代码 继承 概念:如果多个类中具有相同的字 ...

  5. Java学习笔记之封装与继承

    封装 1,将属性定义为私有的(private)   不能通过  对象名.属性  来直接访问,但是可以通过方法来间接的访问, 2,封装的意义:公有属性可以被随意修改,并且不能被程序察觉.封装后,别人通过 ...

  6. JAVA的三大特征 封装继承多态- 简单总结

    简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对 ...

  7. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  8. Java 学习笔记(7)——接口与多态

    上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...

  9. Java学习笔记三.3

    9.异常处理:Java中的异常处理对象就是将以前的if语句进行的判断进行抽象化,并形成的一套错误处理体系.最顶端是Throwable,接着是Error,Exception,其中Exception又明显 ...

  10. Java学习笔记三.2

    5.继承 //Java中所有对象都显式/隐式的继承子Object类 class fu{ fu(){ System.out.println("fu..."+getNum()); sh ...

随机推荐

  1. js 策略模式 实现表单验证

    策略模式 简单点说就是:实现目标的方式有很多种,你可以根据自己身情况选一个方法来实现目标. 所以至少有2个对象 .  一个是策略类,一个是环境类(上下文). 然后自己就可以根据上下文选择不同的策略来执 ...

  2. JavaScript面试技巧之数组的一些不low操作

    本文主要从应用来讲数组api的一些骚操作; 如一行代码扁平化n维数组.数组去重.求数组最大值.数组求和.js排序.对象和数组的转化等: 上面这些应用场景你可以用一行代码实现? 1.扁平化n维数组 1. ...

  3. 学用纯CSS打造可折叠树状菜单

    随着CSS3的发布,国外研究正如火如荼,但在国内还有很多人抱着IE不支持CSS3的想法,始终无动于衷不肯去学习.但是历史告诉我们,好的东西必将盛行,CSS3也终将也会替代CSS2,下面就和大家分享一个 ...

  4. element-ui 时间日期选择器格式化后台需要的格式

    <el-date-picker v-model="startTime" type="datetime" format="yyyy-MM-dd H ...

  5. GitHub for Windows离线安装包

    国内安装github客户端,真的很痛!! 偶然找到了离线安装包,感谢作者的资源分享!!! 地址:http://download.csdn.net/download/lyg468088/8723039? ...

  6. BZOJ 2463: [中山市选2009]谁能赢呢?(智商)

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3110  Solved: 2250[Submit][Status][Discuss] Descript ...

  7. 2018-12-16 VS Code英汉词典进化效果演示: 翻译文件所有命名

    续VS Code英汉词典插件v0.0.7-尝试词性搭配, 下一个功能打算实现文件的批量命名翻译: 批量代码汉化工具 · Issue #86 · program-in-chinese/overview ...

  8. 通过 python ssh库连接并发送命令给设备

    import paramiko import time hostname = '192.168.248.156' port = 22 user = 'zhou' passwd = ' paramiko ...

  9. 喜闻乐见-Android LaunchMode

    launchMode,通俗点说,就是定义了Activity应该如何被launch的.那么这几种模式的区别以及应用场景,会有何不同呢?谷歌是基于什么原因设计这几种模式的呢?这几种模式背后的工作原理是什么 ...

  10. gitlab runner安装与使用

    今天来讲一下如何使用gitlab-runner 下载runner,根据自己对应服务器的型号自行选择下载: # Linux x86- sudo wget -O /usr/local/bin/gitlab ...