Java学习笔记(三)——封装、继承、多态

一、封装

概念:

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

实现步骤:

修改属性的可见性——设为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

猜你喜欢

转载自www.cnblogs.com/jlutiger/p/8926711.html
今日推荐