一、封装

概念:

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

实现步骤:

修改属性的可见性——设为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. spring_07使用spring的特殊bean、完成分散配置

    一.   前言   分散配置思路:创建properties文件,添加数据,在beans文件中先配置properties文件,再在bean中使用占位符引用数据 对于bean的生命周期中的很多处理接口,处 ...

  2. 面试官:你分析过mybatis工作原理吗?

    Mybatis工作原理也是面试的一大考点,必须要对其非常清晰,这样才能怼回去.本文建立在Spring+SpringMVC+Mybatis整合的项目之上. 我将其工作原理分为六个部分: 读取核心配置文件 ...

  3. Aurelia 创建模板

    今天介绍一下Aurelia创建模板的三种方式. 模板既可以作为页面也可以作为组件. 1. View+View Model Aurelia的模板通常由一个html文件和一个同名的ts或js文件组成,文件 ...

  4. TP5.0 PHPExcel 数据表格导出导入(引)

    TP5.0 PHPExcel 数据表格导出导入(引) 今天看的是PHPExcel这个扩展库,Comporse 下载不下来,最后只能自己去github里面手动下载,但有一个问题就是下载下来的PHPExc ...

  5. thinkphp5引入公共部分header、footer等

    由于用惯了tp3.2,改用tp5有些还是感觉别扭的 直接上问题:项目中需要用到引入公共导航.头部.底部.右边部分等等 首先要弄清楚thinkphp5的配置项是哪个文件,众所周知:config.php, ...

  6. linux (1): 启动

    很早就接触过linux,但是都是一知半解的用,连皮毛都算不上只记得几个命令而已,故决定好好学习一下linux,当前大环境下如果对linux不熟悉或者说不会基本的使用的话,会遇到很多问题. 历史: (大 ...

  7. 2018-06-21 中文代码示例视频演示Python入门教程第五章 数据结构

    知乎原链 续前作: 中文代码示例视频演示Python入门教程第四章 控制流 对应在线文档: 5. Data Structures 这一章起初还是采取了尽量与原例程相近的汉化方式, 但有些语义较偏(如T ...

  8. Android 打包混淆

    将项目改成Module //项目build.gradle的applicationId注释掉 修改apply plugin: 'com.android.library' 打包混淆脚本 //在项目的bui ...

  9. WebStorm File Watchers配置将.less文件编译后的.css输出至指定目录

    Arguments:其实是命令行输入“lessc file.less file.css”后者指定路径 Output Paths to refresh:刷新changed后.css文件

  10. Android 9.0更新

    北京时间2018年8月7日上午,Google 发布了 Android 9.0 操作系统.并宣布系统版本 Android P 被正式命名为代号"Pie". Android 9.0 利 ...